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