Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Menukar Piksel Imej kepada Tatasusunan Byte di Golang untuk Penciptaan Tekstur OpenGL?

Bagaimana untuk Menukar Piksel Imej kepada Tatasusunan Byte di Golang untuk Penciptaan Tekstur OpenGL?

Patricia Arquette
Lepaskan: 2025-01-05 10:18:40
asal
671 orang telah melayarinya

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

Memperoleh Data Piksel daripada Imej ke dalam Tatasusunan Bait untuk Konteks Golang

Masalah:

Untuk mencipta tekstur menggunakan kaedah texImage2D dalam pakej /mobile/gl, akses kepada nilai piksel diperlukan. Tugasnya adalah untuk menukar nilai piksel imej kepada tatasusunan bait, dengan nilai RGBA disusun berturut-turut dari kiri ke kanan, atas ke bawah.

Penyelesaian:

Malangnya, img.Pixels() bukan kaedah yang tersedia untuk mengekstrak data piksel mentah. Walau bagaimanapun, penyelesaiannya terletak pada lelaran ke atas piksel imej dan mengekstrak komponen RGBA mereka. Langkah berikut menggariskan pendekatan:

  1. Muat imej: Muatkan imej daripada fail atau URL menggunakan imej.Decode(). Ini akan mengembalikan imej.Objek imej.
  2. Lelaran melalui piksel: Gunakan gelung untuk melintasi piksel imej, mengakses nilai RGBA masing-masing menggunakan img.At(x, y). RGBA().
  3. Tukar RGBA kepada bait: Untuk mendapatkan perwakilan 8-bit, bahagikan nilai RGBA dengan 257.
  4. Buat tatasusunan bait: Gabungkan perwakilan bait nilai RGBA ke dalam tatasusunan bait tunggal.

Berikut ialah contoh pelaksanaan yang menunjukkan proses:

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
}
Salin selepas log masuk

Pendekatan ini akan memberikan anda bait tatasusunan yang mengandungi data piksel mentah dalam format yang diingini untuk digunakan dengan texImage2D.

Atas ialah kandungan terperinci Bagaimana untuk Menukar Piksel Imej kepada Tatasusunan Byte di Golang untuk Penciptaan Tekstur OpenGL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan