我将128x128图像存储为2048字节的连续数组。给定像素x,y,我如何检索像素的字节索引+位索引?这是一张单色的二进制图像。
答案 0 :(得分:2)
Idx = Y * 128 + X
这方面的一般形式是:
Idx = Y * ImageWidth + X
对于0≤Y≤图像高度,0≤X≤图像宽度
答案 1 :(得分:1)
以下是带有示例调用的代码,用于检索位置(33,41)处的像素值。
#include <limits.h>
// Returns the char position and bit of pixel x, y.
void calc_pos(int x, int y, int width, int *char_no, int *bit_no) {
*char_no = (x + y * width) / CHAR_BIT;
*bit_no = (x + y * width) % CHAR_BIT;
}
int main(int argc, char **argv) {
int char_no, bit_no;
int x = 33, y = 41; // Sample position
int pixel_value;
calc_pos(x, y, 128, &char_no, &bit_no);
pixel_value = img[char_no] & (1 << bit_no);
}
答案 2 :(得分:0)
让我们说你的形象如下:
0 1 2 3 ... 127
1
2
3
...
127
每行像素都有width
个像素,所以你有
y * width
给你一行。
您想要访问该特定行的x
值,因此您有
(y * width) + x
沿着该行给你一个偏移量。
但是,当然,在您的示例中,每个像素长度为8个字节(R,G,B,A各为2个),因此您乘以bpp(每像素位数),因此您有
((y * width) + x) * bpp
。
这当然假定图像的格式与您描述的方式相同。如果图像是自下而上而不是自上而下,或者只有RGB数据,则需要做一些额外的数学运算才能获得正确的像素数据。