Heim > Backend-Entwicklung > Golang > Wie extrahiere ich effizient ein Pixelarray aus einem Golang-Bildobjekt?

Wie extrahiere ich effizient ein Pixelarray aus einem Golang-Bildobjekt?

DDD
Freigeben: 2024-12-17 15:57:11
Original
933 Leute haben es durchsucht

How to Efficiently Extract a Pixel Array from a Golang Image Object?

Erhalten eines Pixel-Arrays aus einem Golang-Bildobjekt

Um ein Pixel-Array in Form eines Byte-Arrays zu erhalten, kann der folgende Ansatz verwendet werden eingesetzt werden.

Erstens stellt die Bildbibliothek die Methode img.At(x, y).RGBA() bereit, um die RGBA-Werte für a abzurufen spezifisches Pixel an den Koordinaten (x, y) im Bild. Um die 8-Bit-Darstellung dieser Werte zu erhalten, muss jede Komponente durch 255 geteilt werden.

Um diesen Prozess zu erleichtern, kann ein zweidimensionales Array von Pixeln wie folgt erstellt werden:

package main

import (
    "fmt"
    "image"
    "image/png"
    "os"
    "io"
    "net/http"
)

func main() {
    // Register the PNG format (can be extended to other formats)
    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 / 255), int(g / 255), int(b / 255), int(a / 255)}
}

type Pixel struct {
    R int
    G int
    B int
    A int
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie extrahiere ich effizient ein Pixelarray aus einem Golang-Bildobjekt?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage