Дамп необработанных данных изображения

У меня есть изображение, хранящееся в памяти в виде необработанных байтов, т.е. у меня есть char*, указывающее на расположение в памяти данных изображения. Теперь мне нужно как-то проверить, являются ли данные изображения законными.

В настоящее время я пробовал просто сбрасывать байты в файл. Я попытался сбросить в 3 типа файлов, но не повезло:

std::ofstream ofs;
ofs.open("Image.raw", std::ofstream::out);
ofs.write((char*)imgData, imageInfo.imageLen);
ofs.close();
// Have also tried "Image.tiff" and "Image.ppm"

Есть ли способ просмотреть содержимое? Просто отметим, что я пишу этот код на платформе Win. Помню, несколько лет назад я проделывал нечто подобное на MAC OS X, и это дало успешные результаты!


person Sankalp    schedule 20.06.2015    source источник
comment
Что такое необработанный формат изображения? Юв? RGB? Поскольку ppm, tiff, bmp являются контейнерами, необходимо добавить конверт.   -  person mpromonet    schedule 20.06.2015
comment
Если вам нужен простой формат контейнера, посмотрите на форматы PNM.   -  person o11c    schedule 21.06.2015


Ответы (1)


Вы можете записать его прямо как RGB в двоичном формате, как у вас уже есть - скажем, в файл с именем image.rgb.

Затем используйте ImageMagick, который установлен в большинстве дистрибутивов Linux и доступен для OSX и Windows, чтобы преобразовать его в PNG, JPEG или что-то более распространенное:

convert -size 300x400 -depth 8 image.rgb result.png

or

convert -size 300x400 -depth 8 image.rgb result.jpg

Вам нужно будет указать ImageMagick размеры изображения, как указано выше, потому что они, очевидно, не встроены в необработанный файл, как в формате JPEG или PNG с заголовком.

Если выбранное вами имя файла не заканчивается на .rgb, вам нужно будет добавить к нему префикс RGB: вот так

convert -size ...   RGB:something.bin   result.png
person Mark Setchell    schedule 20.06.2015
comment
Я пытался использовать ImageMagick в Windows, но мне кажется, что чего-то не хватает. Когда я запускаю указанную вами команду, я получаю сообщение об ошибке: недопустимый аргумент для параметра -size. - person Sankalp; 20.06.2015
comment
Microsoft также поставляет программу под названием convert — она преобразует файловые системы в NTFS. Попробуйте использовать полный путь к convert ImageMagick, например. C:\ImageMagick\convert -size ....` или независимо от того, что вы установили. - person Mark Setchell; 20.06.2015
comment
Блин! Я уже знаю, что «convert» предустановлен для преобразования файловой системы. Я использую только команду ImageMagick, а затем получаю указанную ошибку. - person Sankalp; 20.06.2015
comment
Вот ошибка: convert.exe: неверный аргумент для опции `-size': 637*876 @ error/convert.c/ConvertImageCommand/2755. - person Sankalp; 20.06.2015
comment
Используйте 637x876, а не звездочку. - person Mark Setchell; 20.06.2015
comment
Превосходно! Рад быть полезным - если вашему изображению не хватает контраста, вы можете добавить -auto-level непосредственно перед именем выходного файла. - person Mark Setchell; 20.06.2015