我想知道,如何在Go中执行从RGB到YUV 420P图像的转换(更准确地说是*image.RGBA
到*image.YcbCr
(。我在image
包中没有找到任何标准的方法。由于我也没有找到任何库,我唯一的想法是使用color.RGBToYCbCr()
逐个像素地制作它,但我意识到*image.YcbCr
没有直接处理像素的Set()
方法,所以我有点困惑。我会为一些方向或代码感到高兴。问候
您可以使用image.NewYCbCr()
创建image.YCbCr
的实例,您可以直接操作该实例的像素。那么,这只是对图像中的每个像素使用color.RGBToYCbCr()
的问题:
bounds := original.Bounds()
converted := image.NewYCbCr(bounds, image.YCbCrSubsampleRatio420)
for row := 0; row < bounds.Max.Y; row++ {
for col := 0; col < bounds.Max.X; col++ {
r, g, b, _ := original.At(col, row).RGBA()
y, cb, cr := color.RGBToYCbCr(uint8(r), uint8(g), uint8(b))
converted.Y[converted.YOffset(col, row)] = y
converted.Cb[converted.COffset(col, row)] = cb
converted.Cr[converted.COffset(col, row)] = cr
}
}
在上面的代码段中,original
是规则的image.RGBA
,而converted
是image.YCbCr
。请注意,converted
的颜色分量的阵列中的对应位置pos
是根据original
中的像素坐标来计算的。