Home >Backend Development >Golang >How to Retrieve a Pixel Array from a Go `image.Image` for OpenGL ES 2.0?

How to Retrieve a Pixel Array from a Go `image.Image` for OpenGL ES 2.0?

Susan Sarandon
Susan SarandonOriginal
2024-12-31 20:26:11740browse

How to Retrieve a Pixel Array from a Go `image.Image` for OpenGL ES 2.0?

Pixel Array Retrieval from Go Image.Image

In Go, the image.Image interface represents an image containing pixel data. To obtain a pixel array from an image.Image for use in OpenGL ES 2.0 via the texImage2D method, you can use the following steps:

  1. Define a custom Pixel struct to represent individual pixels:
type Pixel struct {
    R int
    G int
    B int
    A int
}
  1. Create a function, rgbaToPixel, to convert RGBA values to a Pixel struct:
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)}
}
  1. Write a function, getPixels, to extract the pixel array from the image.Image:
func getPixels(img image.Image) ([][]Pixel, error) {
    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
}
  1. Load an image and call getPixels to obtain the pixel array:
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)
}
  1. Use pixels to pass to the texImage2D method as needed.

The above is the detailed content of How to Retrieve a Pixel Array from a Go `image.Image` for OpenGL ES 2.0?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
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