Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 将RGBA转换为NRGBA_Go_Colors - Fatal编程技术网

Go 将RGBA转换为NRGBA

Go 将RGBA转换为NRGBA,go,colors,Go,Colors,我试图返回已更改的像素及其颜色。下面的func工作正常,但它没有提供所需的255255值。是否可以将其转换为所需的格式 我已经在这里查看了文档-> 我还手动尝试了不同的转换,但无法使其正常工作。有人知道如何在golang转换这个吗 type Pixel struct { x, y int r, g, b, a uint32 } func diffImages(imgOne *image.RGBA, imgTwo *image.RGBA) []Pixel { var pix

我试图返回已更改的像素及其颜色。下面的func工作正常,但它没有提供所需的255255值。是否可以将其转换为所需的格式

我已经在这里查看了文档->

我还手动尝试了不同的转换,但无法使其正常工作。有人知道如何在golang转换这个吗

type Pixel struct {
    x, y  int
    r, g, b, a uint32
}

func  diffImages(imgOne *image.RGBA, imgTwo *image.RGBA) []Pixel  {
var pixels []Pixel

bounds := imgOne.Bounds()
diff := false

for y := bounds.Min.Y; y < bounds.Max.Y; y++ {
        for x := bounds.Min.X; x < bounds.Max.X; x++ {

            r, g, b, a := imgOne.At(x, y).RGBA()
            rt, gt, bt, at := imgTwo.At(x, y).RGBA()

            if r != rt || g != gt || b != bt || a != at {
                diff=true
            }

            if diff == true {
                pixel := new(Pixel)
                pixel.x = x
                pixel.y = y
                pixel.r = rt
                pixel.g = gt
                pixel.b = bt
                pixel.a = at
                pixels = append(pixels, *pixel)
            }

            diff = false
        }
    }
return pixels
}
类型像素结构{
x、 y整数
r、 g,b,a uint32
}
func diffImages(imgOne*image.RGBA,imgTwo*image.RGBA)[]像素{
可变像素[]像素
边界:=imgOne.bounds()
差异:=假
对于y:=边界.Min.y;y
如果有比我愿意接受的更好或更快的方法来获得所需的输出


注意:我是新来的。

你是说这个吗?我做了其他重构,你的代码看起来不必要的复杂

我没有测试过这个,没有测试过图像

// Pixels are pixels.
type Pixel struct {
    x, y  int
    color color.NRGBA
}

func diffImages(imgOne image.RGBA, imgTwo image.RGBA) []Pixel {
    var pixels []Pixel

    bounds := imgOne.Bounds()

    for y := bounds.Min.Y; y < bounds.Max.Y; y++ {
        for x := bounds.Min.X; x < bounds.Max.X; x++ {

            if !reflect.DeepEqual(imgOne.Pix, imgTwo.Pix) {

                rt, gt, bt, at := imgTwo.At(x, y).RGBA()
                pixel := new(Pixel)
                pixel.x = x
                pixel.y = y
                pixel.color.R = uint8(rt)
                pixel.color.G = uint8(gt)
                pixel.color.B = uint8(bt)
                pixel.color.A = uint8(at)
                pixels = append(pixels, *pixel)
            }
        }
    }
    return pixels
}
//像素就是像素。
类型像素结构{
x、 y整数
颜色.NRGBA
}
func diffImages(imgOne image.RGBA、imgTwo image.RGBA)[]像素{
可变像素[]像素
边界:=imgOne.bounds()
对于y:=边界.Min.y;y
请举例说明您尝试了什么,输出了什么,以及您希望看到什么。谢谢。这可能很复杂,因为我只习惯于python、ruby和php。对一些人来说,这个问题似乎也很简单。谢谢你的帮助。@Dany:这行得通吗?可能还有其他不正确的地方,因为你正在获取alpha预乘值,并将它们直接放入非alpha预乘颜色中(这将使你的alpha通道与RGB值相乘)@JimB它似乎行得通,但我现在不能确定。我仍然在学习如何编写代码来配合这个项目。有没有其他方法可以将RGBA转换为NRGBA并获得已更改的像素?@Dany:alpha通道总是255吗?您可以看到,如果存在alpha,则RGBA输出必须不同:。为什么您需要“转换”为MRGBA?(假设这些值一开始不应该是NRGBA)