Фон
У меня большой файл TIFF, сжатый в формате JPEG (новый, сжатие 7 в стандарте TIFF) и мозаичный. Что мне нужно сделать, это извлечь эти плитки в отдельные файлы .jpg. Я должен быть в состоянии сделать это без распаковки / повторного сжатия данных изображения, потому что это потребует слишком много вычислительных ресурсов, поэтому все библиотеки, о которых я знаю, исключены.
Я много знаю о структуре файлов TIFF, но почти ничего о структуре файлов JPEG. У меня есть код, написанный прямо сейчас, который считывает данные тега JPEGTable из заголовка TIFF в байтовый массив (это означает, что он переходит к смещению, указанному тегом, и читает его там) И еще один фрагмент кода, который считывает целевой Tile в байт. массив. Затем я записываю байтовый массив Table в новый файл, а затем записываю байтовый массив Tile в этот файл. Последние 2 байта массива Table , которые я записываю с 0xFF, 0xFF, и то же самое для первых 2 байтов массива Tile , потому что я обнаружил, что оба массива начинаются и заканчиваются на последовательности jpeg SOI и EOI соответственно, и если бы у меня их было больше 1, файлы не были бы открыты никакими графическими программами.
For i as Integer = 0 to TableArray.Count-3
stream.WriteByte(TableArray(i))
Next
stream.WriteByte(255)
stream.WriteByte(255)
stream.WriteByte(255)
stream.WriteByte(255)
For i as Integer = 2 to TileArray.Count-1
stream.WriteByte(TileArray(i))
Next
stream.Close()
Задача
Вот где я сейчас нахожусь, проблема в том, что все мои извлеченные плитки окрашены в розовый цвет там, где он должен быть белым, почти как цветовой негатив. Это не сплошной розовый, я вижу очертания объектов, которые я знаю, на исходном изображении. У кого-нибудь есть идеи, как я мог бы решить это? Кроме того, я делаю это в VB.NET, но я не думаю, что язык действительно имеет значение в этом случае, так как кажется, что это скорее проблема концепции / алгоритма / структуры файла, которую я делаю неправильно.
Если кто-то захочет, чтобы я опубликовал часть кода, который я использую, я могу просто знать, какая часть.
РЕДАКТИРОВАТЬ: я нашел в Технических примечаниях TIFF Adobe Photoshop от 22 марта 2002 г. раздел, в котором говорится:
Преобразование из TIFF для обмена JPEG является более сложным. TIFF / JPEG-файл, основанный на полосах, можно довольно легко преобразовать, если все полосы используют одинаковые таблицы JPEG и не имеют маркеров RSTn: просто удалите служебные маркеры и вставьте маркеры RSTn между полосами. Конвертировать мозаичные изображения сложнее, так как данные обычно не будут в правильном порядке (если только мозаики имеют высоту только один MCU). Это все еще можно сделать без потерь, но для потребуется отменить и повторить энтропийное кодирование , чтобы можно было обновлять разности коэффициентов постоянного тока.
Не уверен, относится ли это к моей проблеме или нет.