>백엔드 개발 >Golang >Golang 이미지 객체에서 픽셀 배열을 효율적으로 추출하는 방법은 무엇입니까?

Golang 이미지 객체에서 픽셀 배열을 효율적으로 추출하는 방법은 무엇입니까?

DDD
DDD원래의
2024-12-17 15:57:11857검색

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

Golang 이미지 객체에서 픽셀 배열 얻기

바이트 배열 형태의 픽셀 배열을 얻으려면 다음 접근 방식을 사용할 수 있습니다.

먼저 이미지 라이브러리는 img.At(x, y).RGBA() 메서드를 사용하여 이미지의 좌표(x, y)에서 특정 픽셀에 대한 RGBA 값을 검색합니다. 이러한 값의 8비트 표현을 얻으려면 각 구성 요소를 255로 나누어야 합니다.

이 프로세스를 용이하게 하려면 다음과 같이 2차원 픽셀 배열을 생성할 수 있습니다.

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
}

위 내용은 Golang 이미지 객체에서 픽셀 배열을 효율적으로 추출하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.