Представьте себе просмотрщик изображений. Если ему дан файл, он может оценить суффикс файла, чтобы выбрать подходящий загрузчик изображений. Гораздо лучший способ - прочитать определенное количество первых байтов. Большинство форматов графических файлов (собственно, все, что я знаю лично) содержат определенную последовательность байтов, которую можно использовать для идентификации. (Их часто называют & ldquo; магический код & rdquo; .)
Следовательно, я поискал «файлы изображений tim2», чтобы найти описание формата файла. (Должен признать, я никогда не слышал об этом раньше.) Я нашел: TM2 TIM2 на wiki.xentax.com :
Технические характеристики формата
// Specs based off "Rainbow" from https://github.com/marco-calautti/Rainbow/
// IMAGE HEADER
4 - Header (TIM2)
2 - Version
2 - Number of Images
Преобразование ASCIIs TIM2
в шестнадцатеричные значения (используя таблицу ASCII ), это значения:
54 49 4D 32
Итак, это последовательность для поиска. Хотя появление этой последовательности не является гарантией запуска изображения TIM2, это как минимум показатель вероятности.
Чуть больше по ссылке выше:
// Specs based off "Rainbow" from https://github.com/marco-calautti/Rainbow/
// IMAGE HEADER
4 - Header (TIM2)
2 - Version
2 - Number of Images
// IMAGE DATA
// for each Image
4 - Total Image Length
4 - Palette Length
4 - Image Data Length
2 - Header Length
2 - Color Entries
1 - Image Format (0=8bpp paletted?)
1 - Mipmap Count
1 - CLUT Format
1 - Bits Per Pixel (1=16bbp, 2=24bpp, 3=32bbp, 4=4bbp, 5=8bpp)
2 - Image Width
2 - Image Height
8 - GsTEX0
8 - GsTEX1
4 - GsRegs
4 - GsTexClut
X - User Data (optional) (length = HeaderLength-48)
Я бы использовал следующий алгоритм:
- Поиск двоичного файла для
"\x54\x49\x4D\x32"
.
- Чтение версии (2 байта & rarr; std :: uint16_t)
- Считать количество изображений (2 байта & rarr; std :: uint16_t)
for (std::uint16_t i = 0; i < nImages; ++i)
- Считать общую длину изображения (2 байта & rarr; std :: uint32_t)
- Чтение (общая длина изображения - 4) дополнительных байтов
Таким образом, может случиться так, что считываемые данные на самом деле не являются изображением TIM2. Таким образом, чтение может привести к количеству мусорных байтов. Это может даже попытаться превысить конец всех двоичных данных. Последний случай будет явным индикатором неправильной попытки, от которой следует отказаться.
Некоторые из записей заголовка допускают только определенные значения, например, Bits Per Pixel, которая, кажется, допускает значения только в диапазоне [1, 5]. Это может использоваться в качестве дополнительного индикатора того, являются ли (или нет) данные на самом деле изображением TIM2.
Все прочитанные данные должны быть записаны как есть в новый файл. Как уже упоминалось в комментарии к меткам, для просмотра данных (независимо от того, формирует ли они действительное изображение TIM2) можно использовать подходящий просмотрщик изображений.