道歉的一个基本问题。我已经检查了for循环herehere,例如,如果我们分析了第一个代码:

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=5pixelBytes[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个字节为单位)

08-19 22:27