C中的图像缓冲区

时间:2013-12-03 15:47:03

标签: c image-processing

我将128x128图像存储为2048字节的连续数组。给定像素x,y,我如何检索像素的字节索引+位索引?这是一张单色的二进制图像。

3 个答案:

答案 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数据,则需要做一些额外的数学运算才能获得正确的像素数据。