Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mengeluarkan Susunan Piksel dengan Cekap daripada Objek Imej Golang?

Bagaimana untuk Mengeluarkan Susunan Piksel dengan Cekap daripada Objek Imej Golang?

DDD
DDDasal
2024-12-17 15:57:11854semak imbas

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

Mendapatkan Tatasusunan Piksel daripada Objek Imej Golang

Untuk mendapatkan tatasusunan piksel dalam bentuk tatasusunan bait, pendekatan berikut boleh bekerja.

Pertama, pustaka imej menyediakan kaedah img.At(x, y).RGBA() untuk dapatkan nilai RGBA untuk piksel tertentu pada koordinat (x, y) dalam imej. Untuk mendapatkan perwakilan 8-bit nilai ini, setiap komponen mesti dibahagikan dengan 255.

Untuk memudahkan proses ini, tatasusunan piksel dwi-dimensi boleh dibuat seperti berikut:

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
}

Atas ialah kandungan terperinci Bagaimana untuk Mengeluarkan Susunan Piksel dengan Cekap daripada Objek Imej Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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