Heim > Backend-Entwicklung > Golang > Wie extrahiere ich ein Pixel-Array aus einem Bild in Go für „texImage2D'?

Wie extrahiere ich ein Pixel-Array aus einem Bild in Go für „texImage2D'?

Susan Sarandon
Freigeben: 2024-12-06 18:45:15
Original
1018 Leute haben es durchsucht

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

Abrufen eines Pixelarrays aus einem Bild in Go

Problem:

Extrahieren eines Pixelarrays aus einem Bild im Für die Übergabe an die texImage2D-Methode von gl.Context ist die Form eines Byte-Arrays erforderlich. Das gewünschte Pixelarray besteht aus RGBA-Werten, die in sequentieller Reihenfolge von links nach rechts und von oben nach unten angeordnet sind.

Lösung:

Um das Pixelarray zu erhalten, gehen Sie wie folgt vor Schritte können unternommen werden:

  1. Bild abrufen:
    Laden Sie das Bild mit image.Decode(a) von einem io.Reader wie os.File oder http.Request.Body.
  2. Einzelne Pixel abrufen:
    Verwenden Sie img.At(x, y) .RGBA() zum Abrufen der RGBA-Werte für jedes Pixel.
  3. Aufbau des Pixels Array:
    Erstellen Sie ein zweidimensionales Array von Pixeln, um die Pixelanordnung darzustellen. Iterieren Sie über jedes Pixel im Bild und fügen Sie seine RGBA-Werte zur entsprechenden Zeile in Pixeln hinzu.
  4. Konvertierung in 8-Bit-Darstellung:
    Da die RGBA-Werte 32-Bit-Ganzzahlen sind , dividieren Sie sie durch 257, um die 8-Bit-Darstellung für texImage2D zu erhalten Methode.
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
}
Nach dem Login kopieren

Indem Sie diese Schritte befolgen, können Sie effektiv ein Pixelarray aus einem Bild zur Verwendung mit der texImage2D-Methode in Go erhalten.

Das obige ist der detaillierte Inhalt vonWie extrahiere ich ein Pixel-Array aus einem Bild in Go für „texImage2D'?. 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