C ++读取和编辑位图图像的像素

我试图创build一个读取图像(从位图开始,因为它们是最简单的)的程序,通过图像search特定的参数(即(255,0,0)的一个像素后面跟着一个( 0,0,255)),并以某种方式更改像素(仅在程序中,不保存到原始文件),然后显示它。

我正在使用Windows,简单的GDI的偏好,我想避免自定义库只是因为我想真正明白我在做这个testing程序。

谁能帮忙? 以任何方式? 一个网站? build议吗? 示例代码?

谢谢

但是,如果通过“位图”,你真的意味着一个位图(即,一个原始的图像文件,只有未压缩的像素数据),这很容易:

char *filename = "filename"; FILE *input = fopen(filename, "rb+"); if (!input) { printf("Could not open input file '%s'\n", filename); system("PAUSE"); return 1; } fseek(input, 0, SEEK_END); size_t size = ftell(input); rewind(input); char *buffer = (char *) malloc(size); if (!buffer) { printf("Out of memory, could not allocate %u bytes\n", size); system("PAUSE"); return 1; } if (fread(buffer, 1, size, input) != size) { printf("Could not read from input file '%s'\n", filename); free(buffer); fclose(input); system("PAUSE"); return 1; } fclose(input); // we loaded the file from disk into memory now for (size_t i = 0; (i + 3) < size; i += 4) { if (buffer[i + 0] == 0xFF && buffer[i + 1] == 0x00 && buffer[i + 2] == 0x00 && buffer[i + 3] == 0x00) { printf("Pixel %i is red\n", (i / 4)); } } free(buffer); 

对不起,这是C风格,但你可以很容易地改变分配到C ++风格。 我个人喜欢阅读文件的C方式。 通常,你会希望if语句检查像素是否是红色的宏/函数。 这将使if语句像“if(compare_4bytes(buffer,0xFF000000))”。

另外,这里假定加载的文件完全由原始像素数据组成。 如果情况并非如此,即。 您阅读.bmp / .png / .jpg或其他内容,您必须先加载,然后将内存中的文件转换为原始像素数据。 这将在评论说:“我们现在从磁盘加载文件到内存”。

BMP肯定是可行的(这几乎是原始的像素数据),但大多数其他类型需要大量的工作/研究。 他们经常使用复杂的压缩算法。 我建议你使用这个库,只是为了将其转换为原始像素数据。

电晕是一个很好的(小)一个( http://corona.sourceforge.net/ ),或魔鬼( http://openil.sourceforge.net/ )或千其他:)

如果通过“位图”来表示BMP,维基百科对位和字节进行了非常全面的描述