Я создал двоичный файл после создания снимка с помощью X11 xGetImage и сохранил содержимое поля данных в двоичный файл(Файл был заархивирован. Пожалуйста, распакуйте его). Теперь я немного поигрался с CImg и изучил его использование.
Первый вопрос
Итак, я попробовал CImg для этих двоичных данных, используя функцию load_rgba.
CImgDisplay *disp;
CImg <float>img1,img2; //I don't why,it only works with float, with int it gives gray colour and with unsigned int it gives black foreground
img2 = img1.load_rgba("imagedata",1366,768); //1366 X 768 is the dimension of my image that i got from X11
disp = new CImgDisplay(1024,768,"window");
disp->display(img2);
Теперь я вижу изображение в окне, но есть потеря качества. поэтому я попытался взглянуть на код и обнаружил, что
в строке 34318
assign(dimw,dimh,1,4); // the depth is assigned to 1. which i believe is the culprit, however i would like confirm it
и почему это работает только тогда, когда для шаблона передается число с плавающей запятой??
Второй вопрос Теперь я подумал, использовать CImg, сначала самостоятельно прочитав файл, а затем передав указатель буфера в Cimg, используя этот код.
int main() {
char *data;
int size = 1366*768*4; //1366 X 768 is the dimension of my image that i got from X11 and 4 is number of bits per pixel
ifstream file ("imagedata", ios::in|ios::binary|ios::ate);
data = new char[size];
file.read (data, size);
CImgDisplay *disp;
CImg <float>img3(data,1366,768,1,4);
disp = new CImgDisplay(1024,768,"window");
disp->display(img3);
getchar();
return 0;
}
Запустив этот код с теми же данными изображения (как и в первом случае), все, что я получаю, это черное окно. Кроме того, установка 4-го параметра (т.е. глубины (z)) приводит к ошибке сегментации.
Что я здесь делаю неправильно?