Maison > développement back-end > Golang > Comment extraire un tableau de pixels d'une image dans Go pour « texImage2D » ?

Comment extraire un tableau de pixels d'une image dans Go pour « texImage2D » ?

Susan Sarandon
Libérer: 2024-12-06 18:45:15
original
1019 Les gens l'ont consulté

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

Récupération d'un tableau de pixels à partir d'une image dans Go

Problème :

Extraction d'un tableau de pixels à partir d'une image dans le La forme d'un tableau d'octets est nécessaire pour le transmettre à la méthode texImage2D de gl.Context. Le tableau de pixels souhaité est constitué de valeurs RGBA disposées dans un ordre séquentiel de gauche à droite et de haut en bas.

Solution :

Pour obtenir le tableau de pixels, ce qui suit des étapes peuvent être suivies :

  1. Obtenir l'image :
    Charger l'image en utilisant image.Decode(a) à partir d'un io.Reader comme os.File ou http.Request.Body.
  2. Obtention de pixels individuels :
    Utilisez img.At(x, y) .RGBA() pour récupérer les valeurs RGBA pour chaque pixel.
  3. Construire le pixel Tableau :
    Construisez un tableau bidimensionnel de pixels pour représenter la disposition des pixels. Parcourez chaque pixel de l'image, en ajoutant ses valeurs RGBA à la ligne correspondante en pixels.
  4. Conversion en représentation 8 bits :
    Étant donné que les valeurs RGBA sont des entiers 32 bits. , divisez-les par 257 pour obtenir la représentation 8 bits du texImage2D méthode.
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
}
Copier après la connexion

En suivant ces étapes, vous pouvez obtenir efficacement un tableau de pixels à partir d'une image à utiliser avec la méthode texImage2D dans Go.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal