问题在于你对索引的计算。
要在1D数组中获取二维索引(行、列),请执行以下操作:
index = ((number_of_columns * row) + col) * sizeof(data)
number_of_columns
是数据中预期的“列”数-在本例中是图像的宽度。以及
sizeof(data)
是数组中一个项的字节大小-在本例中,RGBA为4字节,RGB为3字节。所以,正如你所确定的,应该是:
long tileIndex = 4 * (x + y * tileWidth);
long canvasIndex = 3 * (x + y * canvasStride);
sizeof
如果可以将数据表示为单个项,则为乘法。例如,在您的示例中,创建2个结构:
struct RGB {
uint8_t r,g,b;
};
struct RGBA {
uint8_t r,g,b,a;
};
void draw(const RGBA* tileRGBA, RGB* canvasRGB, const int canvasStride, const int tileWidth, const int tileHeight)
然后,计算简化为:
long tileIndex = x + y * tileWidth;
long canvasIndex = x + y * canvasStride;