题
我有个问题问读一个bmp图像。我怎么可以像素数值(R、G、B值)在一个bmp的图像?任何人都可以帮助我,使用C++编程语言?
解决方案
简单的方法是要找到一个很好的图像处理图书馆为你选择的平台,并使用。
- Linux ImLib / GDK-Pixbuf(侏儒/GTK) / 脱图像(KDE/q-t) 应该是能够做到的你需要什么。
- Windows 我不熟悉适当的系统图书馆,但一个 MSDN搜索"位" 可能是一个良好的开端。
- Mac OS x 可可有一些图像操纵功能,请参阅 这篇文章.
硬盘的方式将是开放的文件而实际上解释二进制数据内。要做到这一点,你会需要的 BMP文件说明书.我建议试图简单的方法的第一个。
其他提示
请注意:您可能需要获取额外的字节为阿尔法值,如果你的BMP有alpha通道。在这种情况下,图像会image[pixelcount][4]
,你将再增加getc(streamIn)
行认为,第四指数。我BMP横空出世,并不需要这一点。
// super-simplified BMP read algorithm to pull out RGB data
// read image for coloring scheme
int image[1024][3]; // first number here is 1024 pixels in my image, 3 is for RGB values
FILE *streamIn;
streamIn = fopen("./mybitmap.bmp", "r");
if (streamIn == (FILE *)0){
printf("File opening error ocurred. Exiting program.\n");
exit(0);
}
int byte;
int count = 0;
for(i=0;i<54;i++) byte = getc(streamIn); // strip out BMP header
for(i=0;i<1024;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("pixel %d : [%d,%d,%d]\n",i+1,image[i][0],image[i][1],image[i][2]);
}
fclose(streamIn);
〜Locutus
你需要研究BMP文件的格式。它是更容易阅读压缩的24位BMP文件。他们只是包含一个标题在开始和RGB值的每一像素。
开始有了这个,检查实例的2x2图像在 http://en.wikipedia.org/wiki/BMP_file_format.按照下面的步骤。
- 创建2x2BMP图像显示在维基百科上。
- 打开文件,在二元模式,用你的C节目。
- 寻求字节的位置54个。
- 读3字节。
字节数将是0,0和255分别。(不确定是否便是RGB。我已经做到了这一长回来和我想的了不是RGB。只是验证这一点。)
就这么简单!研究的头骨要了解更多关于格式。
不隶属于 StackOverflow