#c #cimg #phash
#c #cimg #phash
Вопрос:
Я пытаюсь изменить библиотеку 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_1_1CImg.html
Массив байтов заполняется с помощью http-запроса для исходного изображения.
Комментарии:
1. Откуда нам знать? Мы понятия не имеем, что
CImg
это такое, или какими должны быть измерения, или какую библиотеку вы используете.2. В вашем вопросе недостаточно информации, чтобы кто-либо мог дать правильный ответ. Предполагая, что вы используете этот API , вы должны знать размеры. Как вы создали и заполнили массив байтов?
3. @Random: Учитывая, что вы получили размеры изображения и у вас есть 2D-матрица изображения, могу я спросить, как вам удалось создать экземпляр CImg из файла?
4. Я знаю, что это старый вопрос, но вы говорили об исправлении pHash, удалось ли вам сделать то, что, я полагаю, позволяет загружать изображения из памяти? Я пытаюсь сделать то же самое, но CImg на самом деле не помогает…
5. Нет, я ничего не смог заставить работать. Мне просто нужно было записать массив байтов во временный файл и работать с ним оттуда.
Ответ №1:
Если ваш массив байтов содержит копию всего файла изображения (а не только часть растрового изображения), тогда вы можете прочитать размеры из заголовка.
Смотрите BITMAPFILEHEADER
И BITMAPINFOHEADER
(конечно, для других форматов, таких как PNG или JPEG, вам понадобятся соответствующие заголовки).
Например, это позволит вам просматривать изображение из сети или сегмента ресурсов вашего приложения без предварительной записи его на диск.