所以我有一个bmp文件,我想为图像的每个像素提取rgb的细节。
我在某处读到以下内容会为我做这件事
int main(){
int image[100][3]; // first number here is 100 pixels in my image, 3 is for RGB values
FILE *streamIn;
int i;
streamIn = fopen("./t.bmp", "r");
if (streamIn == (FILE *)0){
printf("File opening error ocurred. Exiting program.\n");
return 0;
}
int byte;
int count = 0;
for(i=0;i<54;i++) byte = getc(streamIn); // strip out BMP header
for(i=0;i<100;i++){ // foreach pixel
image[i][2] = getc(streamIn); // use BMP 24bit with no alpha channel
image[i][1] = getc(streamIn); // BMP uses BGR but we want RGB, grab byte-by-byte
image[i][0] = getc(streamIn); // reverse-order array indexing fixes RGB issue...
//printf("[%d,%d,%d] ",image[i][0],image[i][1],image[i][2]);
if(image[i][0]==255 && image[i][1]==255 && image[i][2]==255)
printf("B");
else if(image[i][0]==0 && image[i][1]==0 && image[i][2]==0)
printf("W");
else{
printf("[%d,%d,%d]",image[i][0],image[i][1],image[i][2]);
//return 0;
}
}
fclose(streamIn);
return 0;
}
现在考虑我的bmp文件是10 * 10像素,上面的方法会起作用吗?
编辑我添加了答案,也许可以帮助某人。欢呼声。
答案 0 :(得分:2)
此代码示例非常粗糙,我不建议这样做。
但是,如果你坚持,你需要知道一条规则:每行填充到4个字节的精确倍数。在你的情况下,一行是10 * 3或30字节,因此它获得2个额外的填充字节。如果您在阅读文件时没有考虑到这一点,那么您将会离开。
答案 1 :(得分:0)
所以我从三个不同的jpg创建了三个不同的bmp文件,每个都有不同的像素数,这就是我发现的。
上述结论是基于我所采用的实例,绝不是一般化的。希望它有所帮助。