FreeImage: получить цвет пикселя

Я пишу небольшое приложение, которое считывает цвет каждого пикселя изображения и записывает его в файл. Сначала я сделал это на Python, но это слишком медленно для больших изображений. Затем я обнаружил библиотеку FreeImage, которую я мог бы использовать, но я не могу понять, как использовать метод GetPixelColor. Не могли бы вы привести пример, как получить цвет, например, пикселя [50:50]? Вот информация о GetPixelColor: http://freeimage.sourceforge.net/fnet/html/13E6BB72.htm. Большое спасибо!


person ghostmansd    schedule 04.10.2011    source источник
comment
Если бы это можно было сделать с помощью DevIL или CImg, тоже было бы хорошо.   -  person ghostmansd    schedule 05.10.2011


Ответы (2)


Если FreeImagePlus использует 24- или 32-битное изображение, получение пикселя с координатами 50, 50 будет выглядеть так:

fipImage input;
RGBQUAD pixel;

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

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

Имейте в виду, что в FreeImage начало координат находится внизу слева, поэтому значения y, вероятно, потребуется инвертировать, вычитая y из высоты изображения, как указано выше.

person wrex    schedule 09.11.2011

Чтобы получить цвет пикселя из входного изображения: 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;

Надеюсь, поможет!

person sinner    schedule 03.10.2013