FreeImage:获取像素颜色

时间:2011-10-04 08:32:11

标签: c++ colors pixel freeimage

我正在编写一个小应用程序,它读取图像中每个像素的颜色并将其写入文件。首先我是用Python做的,但在大图像上它的速度太慢了。然后我发现了FreeImage库,我可以使用它,但我无法理解如何使用GetPixelColor方法。 你能否提供一个如何获得颜色的例子,例如像素[50:50]? 以下是有关GetPixelColor的信息:http://freeimage.sourceforge.net/fnet/html/13E6BB72.htm。 非常感谢你!

2 个答案:

答案 0 :(得分:4)

使用24或32位图像的FreeImagePlus,在coords 50,50处获得像素将如下所示:

fipImage input;
RGBQUAD pixel;

input.load("myimage.png");
height = in.getHeight();

in.getPixelColor(50, height-1-50, &pixel);

请注意,在FreeImage中,原点位于左下角,因此可能需要通过从图像高度中减去y来反转y值。

答案 1 :(得分:0)

要从输入图像中获取像素颜色:img,从函数调用中可以说:void read_image(const char* img),请按照下面的代码段进行操作。

以下是read_image函数的代码片段:

FREE_IMAGE_FORMAT fif = FreeImage_GetFIFFromFilename(img); 
FIBITMAP *bmp = FreeImage_Load(fif, img);

unsigned width = FreeImage_GetWidth(bmp); 
unsigned height =  FreeImage_GetHeight(bmp); 
int bpp = FreeImage_GetBPP(bmp);

FIBITMAP* bitmap = FreeImage_Allocate(width, height, bpp);
RGBQUAD color; FreeImage_GetPixelColor(bitmap, x, y, &color);

变量color将包含图像像素的颜色。您可以按如下方式提取rgb值:

float r,g,b;
r = color.rgbRed;
g = color.rgbGreen;
b = color.rgbBlue;

希望它有所帮助!