道歉的一个基本问题。我已经检查了for
循环here和here,例如,如果我们分析了第一个代码:
for(int i = 0; i < CFDataGetLength(pixelData); i += 4) {
pixelBytes[i] // red
pixelBytes[i+1] // green
pixelBytes[i+2] // blue
pixelBytes[i+3] // alpha
}
变量
i
从0递增到数组pixelData
的长度,步长为4。但是,
pixelBytes[i+3]
如何访问图像的Alpha通道?因此,例如,如果i=5
,pixelBytes[5+3]
如何等于alpha通道而不是仅访问pixelBytes
的第8个元素? 最佳答案
您具有以RGBA格式存储的颜色。在RGBA格式中,一种颜色存储在4个字节中,第一个字节是红色(R)的值,第二个字节是绿色(G),第三个字节是蓝色(B),最后一个是alpha(A)。
您自己的代码在其注释中很好地解释了这一点:
pixelBytes[i] // red
pixelBytes[i+1] // green
pixelBytes[i+2] // blue
pixelBytes[i+3] // alpha
不过,请务必注意,如果我不是4的倍数,那么您将不再能正确读取颜色。
尽管代码不存在,但pixelBytes的数组大小可能等于颜色总数乘以4,这与用于表示颜色的总字节数相同(因为存储了每种颜色) (以4个字节为单位)