如何在C++中打开和读取图像像素?以X、Y的形式读取并获取颜色。
使用Magick++库从图像文件中读取像素的颜色。
#include <Magick++.h>
#include <iostream>
using namespace Magick;
using namespace std;
int main(int argc, char **argv) {
try {
InitializeMagick(*argv);
Image img("C:/test.bmp");
ColorRGB rgb(img.pixelColor(0, 0)); // ie. pixel at pos x=0, y=0
cout << "red: " << rgb.red();
cout << ", green: " << rgb.green();
cout << ", blue: " << rgb.blue() << endl;
}
catch ( Magick::Exception & error) {
cerr << "Caught Magick++ exception: " << error.what() << endl;
}
return 0;
}
BMP是非常简单的。未压缩的BMP由一个头部、一些关于BMP的信息、颜色调色板(如果适用)以及逐像素的位图数据组成。编写自己的位图解析器是一项有趣的练习,尽管处理所有功能(8位、RLE压缩等)需要大量额外的工作。
你最好使用库。Image Magick有一个C库,可以打开几乎任何图像格式并访问像素。SDL_image是另一个非常易于使用的库,SDL可以轻松与OpenGL配合使用。
应该使用哪种图像格式取决于应用程序。JPG具有很好的压缩率,但是压缩是有损的,这意味着你会丢失细节。如果图像带有文本,或者有大面积的纯色或边缘(比如漫画),这是不好的,你会看到明显的伪像。对于照片,JPG通常很好。PNG是一个不错的替代品,它们是压缩的,但是压缩是无损的。JPG通常比PNG小,两者都比BMP小。