Go 将RGBA转换为NRGBA
我试图返回已更改的像素及其颜色。下面的func工作正常,但它没有提供所需的255255值。是否可以将其转换为所需的格式 我已经在这里查看了文档-> 我还手动尝试了不同的转换,但无法使其正常工作。有人知道如何在golang转换这个吗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
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)