Home > Backend Development > Golang > How to Extract a Pixel Array from an Image in Go for `texImage2D`?

How to Extract a Pixel Array from an Image in Go for `texImage2D`?

Susan Sarandon
Release: 2024-12-06 18:45:15
Original
995 people have browsed it

How to Extract a Pixel Array from an Image in Go for `texImage2D`?

Retrieving a Pixel Array from an Image in Go

Problem:

Extracting a pixel array from an image in the form of a byte array is necessary for passing it to the texImage2D method of gl.Context. The desired pixel array consists of RGBA values arranged in a sequential order from left to right and top to bottom.

Solution:

To obtain the pixel array, the following steps can be taken:

  1. Obtain the Image:
    Load the image using image.Decode(a) from an io.Reader like os.File or http.Request.Body.
  2. Getting Individual Pixels:
    Use img.At(x, y).RGBA() to retrieve the RGBA values for each pixel.
  3. Building the Pixel Array:
    Construct a two-dimensional array pixels to represent the pixel arrangement. Iterate over each pixel in the image, adding its RGBA values to the corresponding row in pixels.
  4. Converting to 8-Bit Representation:
    Since the RGBA values are 32-bit integers, divide them by 257 to get the 8-bit representation for the texImage2D method.
package main

import (
    "fmt"
    "image"
    "image/png"
    "os"
    "io"
    "net/http"
)

func main() {
    // Register other formats as needed
    image.RegisterFormat("png", "png", png.Decode, png.DecodeConfig)

    file, err := os.Open("./image.png")

    if err != nil {
        fmt.Println("Error: File could not be opened")
        os.Exit(1)
    }

    defer file.Close()

    pixels, err := getPixels(file)

    if err != nil {
        fmt.Println("Error: Image could not be decoded")
        os.Exit(1)
    }

    fmt.Println(pixels)
}

func getPixels(file io.Reader) ([][]Pixel, error) {
    img, _, err := image.Decode(file)

    if err != nil {
        return nil, err
    }

    bounds := img.Bounds()
    width, height := bounds.Max.X, bounds.Max.Y

    var pixels [][]Pixel
    for y := 0; y < height; y++ {
        var row []Pixel
        for x := 0; x < width; x++ {
            row = append(row, rgbaToPixel(img.At(x, y).RGBA()))
        }
        pixels = append(pixels, row)
    }

    return pixels, nil
}

func rgbaToPixel(r uint32, g uint32, b uint32, a uint32) Pixel {
    return Pixel{int(r / 257), int(g / 257), int(b / 257), int(a / 257)}
}

type Pixel struct {
    R int
    G int
    B int
    A int
}
Copy after login

By following these steps, you can effectively obtain a pixel array from an image for use with the texImage2D method in Go.

The above is the detailed content of How to Extract a Pixel Array from an Image in Go for `texImage2D`?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template