Heim > Backend-Entwicklung > Golang > Wie konvertiere ich Bildpixel in ein Byte-Array in Golang für die OpenGL-Texturerstellung?

Wie konvertiere ich Bildpixel in ein Byte-Array in Golang für die OpenGL-Texturerstellung?

Patricia Arquette
Freigeben: 2025-01-05 10:18:40
Original
671 Leute haben es durchsucht

How to Convert Image Pixels to a Byte Array in Golang for OpenGL Texture Creation?

Erfassen von Pixeldaten aus einem Bild in ein Byte-Array für Golang-Kontexte

Problem:

Um Texturen mit zu erstellen Für die Verwendung der texImage2D-Methode im Paket /mobile/gl ist Zugriff auf Pixelwerte erforderlich. Die Aufgabe besteht darin, die Pixelwerte eines Bildes in ein Byte-Array umzuwandeln, in dem RGBA-Werte fortlaufend von links nach rechts und von oben nach unten angeordnet sind.

Lösung:

Leider ist img.Pixels() keine leicht verfügbare Methode zum Extrahieren der rohen Pixeldaten. Die Lösung besteht jedoch darin, über die Pixel des Bildes zu iterieren und ihre RGBA-Komponenten zu extrahieren. Die folgenden Schritte beschreiben den Ansatz:

  1. Bild laden: Laden Sie das Bild aus einer Datei oder URL mit image.Decode(). Dies gibt ein image.Image-Objekt zurück.
  2. Durch Pixel iterieren: Verwenden Sie Schleifen, um die Pixel des Bildes zu durchlaufen und auf ihre jeweiligen RGBA-Werte mit img.At(x, y) zuzugreifen. RGBA().
  3. RGBA in Bytes konvertieren: Um die 8-Bit-Darstellung zu erhalten, dividieren Sie RGBA-Werte um 257.
  4. Byte-Array erstellen: Verketten Sie die Byte-Darstellungen der RGBA-Werte in einem einzelnen Byte-Array.

Hier ist eine Beispielimplementierung, die dies demonstriert Der Prozess:

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
}
Nach dem Login kopieren

Dieser Ansatz stellt Ihnen ein Byte-Array zur Verfügung, das die rohen Pixeldaten enthält im gewünschten Format zur Verwendung mit texImage2D.

Das obige ist der detaillierte Inhalt vonWie konvertiere ich Bildpixel in ein Byte-Array in Golang für die OpenGL-Texturerstellung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage