問題:
使用/mobile/gl套件中的texImage2D 方法,需要存取像素值。任務是將影像的像素值轉換為位元組數組,其中RGBA值從左到右、從上到下連續排列。
解決方案:
不幸的是,img.Pixels() 不是一種提取原始像素資料的現成方法。然而,解決方案在於迭代影像的像素並提取它們的 RGBA 分量。以下步驟概述了該方法:
這是一個範例實作示範了這個過程:
package main import ( "fmt" "image" "image/png" "os" ) func main() { // Open the image file file, err := os.Open("./image.png") if err != nil { fmt.Println("Error: Unable to open the image file.") return } defer file.Close() // Decode the image img, _, err := image.Decode(file) if err != nil { fmt.Println("Error: Unable to decode the image.") return } // Get the pixel array pixelArray, err := GetPixelArray(img) if err != nil { fmt.Println("Error: Unable to get the pixel array.") return } fmt.Println("Pixel array:") fmt.Println(pixelArray) } // GetPixelArray converts an image to a byte array containing the RGBA values of its pixels. func GetPixelArray(img image.Image) ([]byte, error) { bounds := img.Bounds() width, height := bounds.Max.X, bounds.Max.Y // Create a byte array to store the pixel values pixelArray := make([]byte, 0, width*height*4) // Iterate over the pixels and add their RGBA values to the byte array for y := 0; y < height; y++ { for x := 0; x < width; x++ { r, g, b, a := img.At(x, y).RGBA() pixelArray = append(pixelArray, byte(r/257)) pixelArray = append(pixelArray, byte(g/257)) pixelArray = append(pixelArray, byte(b/257)) pixelArray = append(pixelArray, byte(a/257)) } } return pixelArray, nil }
此方法將為您提供包含原始像素的位元組數組與texImage2D 一起使用所需格式的資料。
以上是如何在 Golang 中將圖像像素轉換為位元組數組以進行 OpenGL 紋理創建?的詳細內容。更多資訊請關注PHP中文網其他相關文章!