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