問題:
/mobile/gl パッケージの texImage2D メソッドでは、ピクセル値へのアクセスが必要です。タスクは、画像のピクセル値をバイト配列に変換することです。バイト配列では、RGBA 値が左から右、上から下に連続して配置されます。
解決策:
残念ながら、img.Pixels() は生のピクセル データを抽出するためにすぐに利用できるメソッドではありません。ただし、解決策は、画像のピクセルを反復処理し、その RGBA コンポーネントを抽出することにあります。次の手順でアプローチの概要を説明します。
これを示す実装例は次のとおりです。 process:
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 で使用するための希望の形式の生のピクセル データを含むバイト配列が提供されます。
以上がOpenGL テクスチャ作成のために Golang で画像ピクセルをバイト配列に変換する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。