让我们看看您的阵列寻址方案(索引随着您提供的维数而减少):
frame.data[0] = 0; frame.data[1] = 255; frame.data[2] = 0; frame.data[3] = 255;
frame.data[3] = 0; frame.data[4] = 255; frame.data[5] = 0; frame.data[6] = 255;
frame.data[6] = 0; frame.data[7] = 255; frame.data[8] = 0; frame.data[9] = 255;
重新订购,我们得到
data[ 0] = 0 B pixel 1
data[ 1] = 255 G pixel 1
data[ 2] = 0 R pixel 1
data[ 3] = 0 (overwritten) A pixel 1
data[ 4] = 255 pixel 2
data[ 5] = 0
data[ 6] = 0
data[ 7] = 255
data[ 8] = 0 pixel 3
data[ 9] = 255
data[10] = undefined
data[11] = undefined
如您所见,这正是调试器向您显示的数据。
所以你只需要修改你的地址方案。正确的公式是:
index = component + x * components + y * pitch,
pitch = width * components
为了推导这个公式,您只需要考虑当您增加一个变量时,您必须跳过多少个索引。E、 g.当您增加当前组件时,只需进一步增加一个条目(因为所有组件彼此相邻)。另一方面,如果增加y坐标,则需要跳过与行中相同数量的条目(称为间距,即图像宽度乘以密集堆积的组件数)。