Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mengeluarkan Susunan Piksel dengan Cekap daripada Objek Imej Golang?
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!