Создать CImg‹uint8_t› из байтового массива?

Я пытаюсь изменить библиотеку C++, в которой есть функция, которая создает экземпляр CImg из файла изображения, чтобы вместо этого использовать массив байтов. Это возможно? Я нашел один метод, который, кажется, позволяет это...

CImg  ( const t *const  values,  
  const unsigned int  size_x,  
  const unsigned int  size_y = 1,  
  const unsigned int  size_z = 1,  
  const unsigned int  size_c = 1,  
  const bool  is_shared = false  
) 

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

ОБНОВЛЕНО В ОТНОШЕНИИ КОММЕНТАРИЙ Это попытка внести изменения в библиотеку pHash, которая использует класс CImg, как определено здесь http://cimg.sourceforge.net/reference/structcimg__library

CImg  ( const t *const  values,  
  const unsigned int  size_x,  
  const unsigned int  size_y = 1,  
  const unsigned int  size_z = 1,  
  const unsigned int  size_c = 1,  
  const bool  is_shared = false  
) 
1CImg.html

Массив байтов заполняется через http-запрос исходного изображения.


person Random    schedule 13.10.2011    source источник
comment
Откуда мы должны знать? Мы понятия не имеем, что такое CImg, какие должны быть размеры или какую библиотеку вы используете.   -  person Lightness Races in Orbit    schedule 13.10.2011
comment
В вашем вопросе недостаточно информации, чтобы кто-либо мог дать правильный ответ. Если вы используете этот API, вам необходимо знать размеры. Как вы создали и заполнили массив байтов?   -  person Robᵩ    schedule 13.10.2011
comment
@Random: Учитывая, что вы получили размеры изображения и у вас есть матрица 2D-изображения, могу я спросить, как вам удалось создать экземпляр CImg из файла?   -  person Shobhit Puri    schedule 13.03.2013
comment
Я знаю, что это старый вопрос, но вы говорили об исправлении pHash, удалось ли вам сделать то, что, как я полагаю, позволяет загружать изображения из памяти? Я пытаюсь сделать то же самое, но CImg на самом деле не помогает...   -  person Schmurfy    schedule 05.05.2014
comment
Нет, я ничего не мог заставить работать. Мне просто нужно было записать массив байтов во временный файл и работать с ним оттуда.   -  person Random    schedule 05.05.2014


Ответы (1)


Если ваш массив байтов содержит копию всего файла изображения (а не только часть растрового изображения), вы можете прочитать размеры из заголовка.

См. BITMAPFILEHEADER и BITMAPINFOHEADER (конечно, для других форматов, таких как PNG или JPEG, вам понадобятся соответствующие заголовки).

Например, это позволит вам просматривать изображение из сети или сегмента ресурса вашего приложения без предварительной записи его на диск.

person Ben Voigt    schedule 13.10.2011