Формат Blp, а не открытие

Обновлено: 03.07.2024

Не удается открыть файл BLP? Ты не единственный. С подобными проблемами ежедневно сталкиваются тысячи пользователей. Ниже вы найдете советы о том, как открыть файлы BLP, а также список программ, поддерживающих файлы BLP.

Расширение файла BLP

Имя файла Формат текстуры Blizzard
Разработчик файла Blizzard Entertainment< /td>
Категория файлов Игровые файлы

Файл BLP поддерживается в 2 операционных системах. В зависимости от вашей операционной системы вам может потребоваться различное программное обеспечение для обработки файлов BLP. Ниже приводится сводка количества программ, которые поддерживают и открывают файл BLP на каждой системной платформе.

Операционные системы

Что такое файл BLP?

Файл BLP относится к категории игровых файлов. Создателем этого файла является Blizzard Entertainment. В дополнение к этому файлу категория «Игровые файлы» включает 1509 связанных файлов. Blizzard Texture Format чаще всего встречается в 2-х операционных системах. Хотя его с большим или меньшим успехом можно найти в любой операционной системе, он будет полезен только в Mac OS, Windows. Есть также 4 альтернативные программы для обработки файла BLP. XnView, World of Warcraft, Warcraft III: Reign of Chaos применяются, когда невозможно использовать BLP Viewer.

Как открыть файл BLP?

Часто повторяющаяся проблема с Blizzard Texture Format заключается в том, что BLP не связан с правильным программным файлом. Таким образом, при открытии BLP запускается мастер выбора программы или какая-то другая программа. Эту проблему можно быстро решить, следуя приведенным ниже инструкциям.

Первое, что вам нужно сделать, это просто дважды щелкнуть значок файла BLP, который вы хотите открыть. Если в операционной системе есть соответствующее приложение для его поддержки, а также существует связь между файлом и программой, файл следует открыть.

Шаг 1. Установите средство просмотра BLP

В этом случае необходимо сначала убедиться, что на компьютере установлено приложение BLP Viewer. Это можно сделать, введя BLP Viewer в поисковую систему операционной системы. При отсутствии соответствующей программы ее установка в подавляющем большинстве случаев решит проблему. Далее в этой статье вы найдете список программ, которые могут открывать файлы BLP.

Программы для открытия файла BLP

Не забывайте загружать программы, поддерживающие файлы BLP, только из проверенных и безопасных источников. Мы предлагаем использовать сайты разработчиков программного обеспечения.

Warcraft III: Reign of Chaos

Варкрафт III: Царство хаоса

World of Warcraft

Мир Варкрафта

XnView

XnView

Просмотрщик BLP

Просмотр BLP

XnView

XnView
Шаг 2. Создайте ассоциацию BLP Viewer с файлами BLP

Если, несмотря на установленное приложение, файл BLP не запускается в приложении BLP Viewer, необходимо создать ассоциацию файлов. Удобнее всего вызвать контекстное меню правой кнопкой мыши и выбрать Свойства. Информация о файле и программе, с которой он связан, доступна здесь. С помощью кнопки «Изменить» мы можем настроить программу на обработку этого типа. Может случиться так, что в следующем окне не будет подходящей программы - впрочем, это можно исправить опцией "Обзор", где следует вручную указать местонахождение программы. Поле «всегда использовать выбранную программу .» установит приложение BLP Viewer в качестве приложения по умолчанию для обработки файла BLP.

Шаг 3. Обновите BLP Viewer до последней версии

Неисправность также может быть связана с программой BLP Viewer, возможно, для Blizzard Texture Format требуется более новая версия программы.

Шаг 4. Проверьте наличие следующих проблем с файлом BLP
Файл пуст или неполный

Затрагиваемый файл может иметь размер 0 КБ или меньше ожидаемого. Чаще всего это вызвано проблемой при загрузке файла BLP. Файл следует загрузить снова, убедившись, что процесс завершился корректно.

Файл BLP заражен вирусом

Наиболее распространенной причиной здесь являются компьютерные вирусы. Быстрая проверка на вирусы с помощью современной антивирусной программы должна развеять любые сомнения. Кроме того, вы можете использовать сканеры, доступные в Интернете. Сканирование должно охватывать весь компьютер, а не только файл BLP, который мы хотим открыть.В результате сканирования иногда не удается восстановить BLP-файлы, которые удаляются, если есть резервная копия этого файла, то после его восстановления его также необходимо сканировать.

Файл находится в другой версии

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

Файл поврежден

Причин сбоя может быть много. Метод восстановления должен быть адаптирован к типу файла и повреждению. Иногда в самой программе есть опции для восстановления самых популярных поврежденных файлов BLP.

Файл BLP зашифрован

При чтении появляется сообщение о том, что файл был зашифрован или поврежден. Зашифрованный файл BLP кроме специального обозначения работает нормально, но только на том устройстве, где он был зашифрован, перед передачей на другую машину требуется расшифровка.

Файл находится в месте с ограниченным доступом

Некоторые системные каталоги исключены из модификации. Хотя обычно нет проблем с чтением такого файла, сохранить его может быть невозможно. Если возможно, вы можете попытаться переместить файл BLP в другое место.

Файл BLP используется

Это может произойти с файлом, который не поддерживает множественный доступ. В этом случае файл BLP блокируется первым приложением, открывшим его. Закрытие других программ должно помочь. Иногда необходимо немного подождать, прежде чем снова обратиться к файлу BLP. Некоторое антивирусное программное обеспечение или программное обеспечение для резервного копирования могут занимать файл BLP в течение определенного периода времени. Если ничего не помогает, перезагрузите устройство.

Введение

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

К чему вся эта ерунда с преобразованием? Почему я не могу просто загрузить файлы BLP прямо в Photoshop, отредактировать их и сохранить обратно в BLP? И тут я вспомнил - потому что для этого формата нет плагина Photoshop.

Поэтому я решил попытаться это изменить, и я это сделал.

Поддерживаемые форматы

Для плагина Mac OS X требуется OS X 10.6 (Lion)+

Окна
1. Найдите свою папку Photoshop
a. например 1: (x64) C:\Program Files\Adobe\Adobe Photoshop CS6 (64 Bit)\
b. например 2: (32-разрядная версия) C:\Program Files\Adobe\Adobe Photoshop CS6\

<р>2. Из этой папки перейдите в \Plug-ins\File Formats\ (создайте папку "Форматы файлов", если она не существует)

<р>3. Поместите соответствующий подключаемый модуль (x64 или x86) в эту папку.

<р>4. Запустите Фотошоп

ОС Х
1. Найдите папку Photoshop,
например, /Applications/Photoshop CS6/

<р>2. Из этой папки перейдите в \Plug-ins\File Formats\ (создайте папку "Форматы файлов", если она не существует)

<р>3. Поместите BLP.plugin в эту папку

<р>4. Запустите Фотошоп

Поддерживаемые варианты

Моей целью было поддерживать каждый вариант формата BLP, который Blizzard использует в WoW, как для открытия, так и для сохранения. Конечным результатом является 11 различных комбинаций сжатия и прозрачности. Ниже приведен их список.

В качестве временного решения измените глубину альфа-канала в таких файлах на "8" с помощью шестнадцатеричного редактора или нового инструмента, и они будут загружаться правильно.


Вопросы, комментарии и другие отзывы

Пожалуйста, прокомментируйте ниже, особенно если вы обнаружите ошибку, не упомянутую выше. Если это проблема загрузки файла WoW BLP или сохранения вашего собственного, дайте мне знать. Если это файл WoW, дайте мне знать его название, а если это ваш собственный файл, я был бы признателен за ссылку (либо в комментариях, либо в личном сообщении) на исходное изображение, которое вы пытаетесь преобразовать. Если вам неудобно отправлять мне PSD-файл, это тоже нормально, но в чем бы ни заключалась проблема, он может потеряться при преобразовании.

Пользователи Mac, спасибо за терпение!

Я никогда не планировал, что "скоро" будет соперничать с определением Blizzard, но жизнь имеет тенденцию вмешиваться в намерения. Я надеюсь, что вы найдете его полезным, и если у вас возникнут какие-либо проблемы, сообщите мне об этом.




< img class="lazyload" data-src="https://i.imgur.com/3TwSojN.jpg" />



< /p>

1.1
Windows[*]Загрузка BLP с прозрачностью теперь будет загружать указанную прозрачность в альфа-канал, а не объединять ее с каналами RGB. [*]Сохранение в BLP теперь не будет игнорировать альфа-канал, если он существует. [*]Различные странные значения Alpha Depth/Alpha Mod обрабатываются правильно для полной поддержки BLP!




Экспериментальный конвертер BLP, написанный на чистой Java. Может загружать действительные файлы BLP0 и 1, а также распространенные форматы, такие как JPEG и PNG. Он также может сохранять в этих форматах.

В настоящее время сохранение в формате BLP поддерживает только содержимое JPEG формата BLP1 с качеством 80 % (стандарт Blizzard) с точностью до альфа-канала на основе исходного изображения и MIP-карт. Полученные файлы BLP всегда должны работать внутри WC3.

Требуется Java SE 8. Если установлена ​​Java 8, при двойном щелчке должен запускаться графический интерфейс, в противном случае вам может потребоваться запустить его из командной строки.

Просто откройте файл изображения и сохраните его в нужном формате. Это так просто, если работает.

Стоит отметить, что этот инструмент более точен, чем BLP Lab, когда дело доходит до открытия файлов BLP. Это также более точно, когда дело доходит до экономии. Однако многие функции еще предстоит раскрыть.

Вложения

тилингхаст

тилингхаст

Ресурсы

Я считаю, что это может быть единственный инструмент, способный обрабатывать blp0 в Интернете прямо сейчас. Огромное спасибо

Доктор Супер Гуд

Доктор Супер Гуд




Ресурсы

Я считаю, что это может быть единственный инструмент, способный обрабатывать blp0 в Интернете прямо сейчас. Огромное спасибо

Я думаю, причина этого в том, что люди написали конвертеры для BLP0 в BLP1. Единственная разница между форматами, что касается WC3, заключается в том, что BLP0 имеет отдельные файлы MIP-карт, тогда как BLP1 помещает все MIP-карты в один и тот же файл, используя таблицу смещения и размера. Такой преобразователь очень легко написать, и ему даже не нужно анализировать заголовок BLP0 после магического идентификатора файла (чтобы подтвердить, что это BLP0). Оглядываясь назад, я мог бы написать такой преобразователь для работы с BLP0, преобразуя его во временный файл BLP1, поскольку это упростило бы логику ввода-вывода.

тилингхаст

тилингхаст

Ресурсы

Доктор Супер Гуд, я имел в виду, что не смог найти работающую загрузку для других конвертеров blp0, потому что их ссылки были мертвы как минимум десять лет.
Планируете ли вы продолжать работу над этим? Потому что есть вещи, которые можно немного отполировать. Я перечислю то, что я нашел, если вам интересно.

Доктор Супер Гуд

Доктор Супер Гуд




Ресурсы

В конце концов. В последнее время меня отвлекла от этого работа над JMPQ.

Многие проблемы уже устранены внутри компании. Я также планировал разрешить ему поддержку чтения/записи большего количества форматов.

Фротти

Фротти


Ресурсы

Если да, не возражаете ли вы против PR интеграции Gradle?

Было бы неплохо иметь окончательные библиотеки для важных форматов.
Планируете ли вы также mdx? Oger-Lord раньше делал кое-что из mdx/blp, но сейчас он неактивен.
Поскольку я хочу использовать его в будущем, было бы хорошо либо очистить его библиотеку, либо иметь другую доступную.

Доктор Супер Гуд

Доктор Супер Гуд




Ресурсы

Imperial BLP является оболочкой для этого API. Я так и не удосужился его зафиксировать, так как обертка была в очень примитивном состоянии (графические интерфейсы сложны).

Я начинаю думать, что плагин GIMP, вероятно, был бы лучшим способом для пользовательского интерфейса, поскольку таким образом GIMP может справляться со всеми операциями ввода-вывода и манипуляциями. Однако не уверен, что можно связать JAVA с GIMP.

При всей полезности системы подключаемых модулей Java ImageIO ее API несколько запутан. Особенно то, как он использует специальные ImageInput/OutputStreams, которые не совместимы с nio и стандартным io. Тем не менее, возможность загружать изображения BLP в несколько строк кода по-прежнему полезна.

Не совсем понимаю, как это сделать.

В настоящее время я не планирую использовать MDX/MDL. Когда я это сделаю, я могу начать с одной из существующих библиотек и очистить ее.

Основная причина, по которой я сделал BLP, заключалась в том, что все другие реализации были неверными, поскольку они основывались на неправильной спецификации BLP, написанной во время бета-тестирования RoC и вскоре после выпуска. Плагин My ​​Java BLP Image IO является единственным сторонним BLP0 и BLP1, который правильно читает/записывает формат файла, даже если API нечеткий, а создаваемые файлы BLP с содержимым JPEG слегка раздуты. Например, он может читать BLP индекса цвета BLP с 1- и 4-битным альфа-каналом (не используется, но все еще поддерживается WC3), что в то время не было доступно никаким другим сторонним API или программам. По иронии судьбы формат индексированных цветов, используемый BLP2 (World of Warcraft), работает точно так же, просто никто не думал, что BLP0/1 его поддерживает.




Это руководство охватывает спецификацию файлов Warcraft III BLP. Файлы World of Warcraft BLP полностью не охвачены, но они достаточно хорошо указаны в других источниках. Это обновление существующих спецификаций, основанное на наблюдениях и результатах экспериментов.

Файл BLP (расширение .blp) представляет собой контейнер изображения. Каждый файл BLP содержит одно изображение с необязательным полным набором изображений MIP-карт. Формат поддерживает изображения размером до 65 535 пикселей в любом измерении. Файлы BLP0 логически ограничены не более чем 512 пикселями в любом измерении. BLP1 имел такое же ограничение размера, что и BLP0, до патча Warcraft III The Frozen Throne 1.27b. BLP1 также использовался для ограничения максимального полезного уровня MIP-карты до 512 пикселей в любом измерении до патча 1.29 для Warcraft III The Frozen Throne.

Пиксели создают линейные компоненты цвета RGB и, при необходимости, альфа-компонент. Размер компонентов цвета варьируется в зависимости от типа кодирования. Некоторые типы данных декодированных компонентов предназначены для прямой загрузки в виде текстур линейного цветового пространства с помощью графического API.

Важно отметить, что файлы BLP технически содержат линейные изображения цветового пространства RGB. Большинство изображений, например, из файлов JPEG или нарисованных с помощью художественных инструментов, обрабатываются в sRGB или других нелинейных цветовых пространствах. Это означает, что теоретически необходимо выполнить преобразование цветового пространства, чтобы изображение BLP представляло правильные цвета. Однако есть убедительные доказательства того, что Blizzard рассматривала компоненты изображения как sRGB при кодировании ресурсов Warcraft III, возможно, из-за отсутствия понимания управления цветовым пространством. Чтобы закодированные и декодированные активы в целом отображались должным образом, не рекомендуется выполнять коррекцию цветового пространства при обработке файлов BLP. Если для выходных пиксельных компонентов требуется цветовое пространство, рекомендуется использовать sRGB, поскольку это, вероятно, будет наиболее визуально правильным. При кодировании рекомендуется использовать значения компонентов пикселя напрямую, по возможности игнорируя цветовое пространство.

В Warcraft III можно применить приблизительную коррекцию цветового пространства после рендеринга сцены как часть настройки «гамма». Гамма Warcraft III варьируется примерно от показателя степени 1,2 (минимум, значение 0) до показателя степени 0,2 (максимум, значение 100, гамма 5,0). Для полуточных результатов гамма может быть установлена ​​на ~ 2,2 (настройка реестра 74-75). Способ, которым WC3 генерирует LUT гамма-коррекции, страдает незначительной ошибкой округления или, возможно, использует более правильную кривую sRGB, а не простую гамма-кривую. Стоит отметить, что, несмотря на то, что это технически правильно, игра будет выглядеть ужасно и переэкспонировано, намекая на то, что текстуры не были правильно управляемы цветовым пространством.

Структура файла

Структура файла заголовка BLP основана на потоках. Это означает, что рекомендуется читать его по одному полю за раз в объект, а не отображать непосредственно в структуру. Обратите внимание, что приведенный ниже код является своего рода псевдокодом, поэтому он не предназначен для прямого использования языком программирования, он предназначен только для того, чтобы дать представление о структуре файлового потока. Все поля имеют обратный порядок байтов.

Структура файла

.blp

Заголовок файла BLP

Все поля предполагают обратный порядок байтов, если не указано иное.

Заголовок файла BLP.

Волшебное поле используется для идентификации файлов как файлов изображений BLP и версии их формата. Он состоит из 4 символов ASCII, которые последовательно представляют что-то удобочитаемое для человека. При формировании строк символы считываются от младшего байта к старшему байту. Это должно быть декодировано в постоянный номер версии, чтобы облегчить последующее чтение и обработку.


Поле содержимого определяет способ хранения данных изображения. CONTENT_JPEG использует нестандартное сжатие файлов JPEG (JFIF) значений цветовых компонентов BGRA, а не обычные значения цветовых компонентов Y'CbCr.CONTENT_DIRECT относится к множеству форматов хранения, которые можно напрямую считывать как значения пикселей. Если поле содержимого недопустимо, то следует принять CONTENT_JPEG, и рекомендуется создать предупреждение.

Поля encodingType и sampleType определяют кодировку, используемую для изображений CONTENT_DIRECT. Точная механика полей здесь не описана. Для версий 0 и 1 можно предположить, что они соответствуют индексированной кодировке.

Поле alphaBits определяет точность альфа-компонента сохраненного изображения. CONTENT_JPEG должен иметь либо 0, либо 8 бит из-за механизма хранения компонентов JPEG, а альфа-компонент JPEG должен физически существовать даже для 0 бит. Известно, что прямое содержимое поддерживает значения 8, 4, 1 или 0 бит и зависит от типа кодирования. Недопустимые значения alphaBits для используемого содержимого или кодировки должны оцениваться как 0 бит, и рекомендуется создать предупреждение.

Warcraft III имеет непоследовательную обработку для CONTENT_JPEG с 0-битным альфа-каналом, поскольку изображения пользовательского интерфейса правильно непрозрачны, но значения альфа-компонента по-прежнему используются при смешивании текстур модели. Таким образом, при записи CONTENT_JPEG с 0-битным альфа-каналом требуется, чтобы альфа-диапазону были назначены непрозрачные значения компонента (0xFF).

При использовании некоторых типов прямого кодирования в версии 2 возможно, что поле alphaBits принимает другое, неизвестное значение в соответствии с различными спецификациями World of Warcraft BLP2.

Поля ширины и высоты определяют размеры в пикселях полномасштабного изображения, хранящегося в файле BLP. Хотя часто это степень двойки, это не обязательно.

Похоже, что дополнительное поле вообще бесполезно. Особо сильной корреляции между использованием файла BLP и его ценностью нет. Тестирование также показывает, что это значение не оказывает визуального влияния на обработку текстур. В некоторых устаревших документах говорилось, что это повлияло на смешение цветов команд на моделях юнитов в Warcraft III, однако тесты не смогли воссоздать такой эффект. Другие люди предполагают, что это может быть поле версии для кодировщика, используемого для создания файлов BLP. Другое предположение может заключаться в том, что Blizzard использовала его внутри компании для выполнения какой-то классификации изображений во время разработки. Изображения, извлеченные без обработки поля, не имеют заметных артефактов. Рекомендуемое значение равно 5, так как оно используется в файле war3mapMap.blp (мини-карте), сгенерированном WorldEdit.

Поле hasMipmaps является логическим значением, если для изображения присутствуют MIP-карты. Если 0, то мип-карты не существуют, и изображение будет представлено в полном разрешении на уровне мип-карты 0. Если не 0, то существует полный набор мип-карт, заканчивающийся изображением 1*1 пикселя на самом высоком уровне мип-карты (например, для максимального размера 65 535). x 65 535 требуется все 16 MIP-карт). Рекомендуется генерировать исключение или ошибку при попытке доступа к уровням MIP-карт, которые логически не существуют. Также рекомендуется генерировать исключение или ошибку при попытке закодировать или декодировать изображение с MIP-картами, размер которого превышает 65 535 пикселей. Когда дело доходит до предварительного просмотра содержимого изображения, MIP-карты можно рассматривать как миниатюры.

Мип-карты требуются для текстур, которые используют мип-карты для фильтрации, например модели. Warcraft III не генерирует MIP-карты для BLP-текстур автоматически, он предполагает, что компоненты RGBA со значением 0 (прозрачный черный цвет) для всех уровней MIP-карт, отличных от 0, при использовании изображения с hasMipmaps, установленным на 0. MIP-карты не требуются для текстур, которым не нужны MIP-карты ( проверено только на Windows), такие как кнопки командной карты, тени и изображения миникарты. Мипмапы также необходимы для текстур, масштаб которых соответствует качеству текстур Warcraft III.

Местоположение Mipmap

Если версия больше или равна 1, то после заголовка BLP присутствует структура расположения блоков MIP-карт.

Заголовок местоположения MIP-карты.

Поле массива mmOffsets определяет смещение файлового потока, где находится фрагмент данных MIP-карты, считая от начала файла. Поле массива mmSizes определяет, сколько байтов должно быть прочитано для фрагмента данных MIP-карты. В обоих массивах индекс относится к уровню MIP-карты, где MIP-карта 0 представляет собой полноразмерное изображение, а более высокие индексы представляют меньшие уровни MIP-карты.

Если hasMipmaps равен 0, то используется только индекс 0. Если hasMipmaps не равен 0, то количество используемых индексов должно быть количеством уровней MIP-карт, необходимых для полноразмерного изображения, которое определяется максимальной высотой и шириной. Для фрагментов данных MIP-карты нет строгих требований к позиционированию или порядку, и между ними можно даже смешивать отступы. Однако рекомендуется размещать фрагменты данных мип-карты последовательно в порядке возрастания уровня мип-карты без заполнения между ними.

Фрагменты данных Mipmap должны быть получены из файла. WC3 не проверяет границы буферов, используемых после чтения EOF файла BLP, что приводит к неопределенному и подверженному сбою поведению.Чтобы разрешить считывание некоторых данных изображения из технически искаженных файлов, рекомендуется, чтобы, если данные MIP-карты превышают EOF, использовалось отсечение EOF для усечения фрагмента данных MIP-карты и создания предупреждения.


Warcraft 3 1.27 — пример текстуры с индексированной цветовой моделью, где значения пикселей небезопасно извлекаются из внешних границ буфера. Круговые элементы, скорее всего, представляют собой мусор памяти, оставшийся после обработки частей графики пользовательского интерфейса часов.

Если версия равна 0, фрагменты данных мип-карт для разных уровней мип-карт хранятся в отдельных файлах. Полномасштабное изображение, mipmap 0, находится в файле в том же каталоге с тем же корневым именем, что и файл BLP, но с расширением «b00». Каждому уровню MIP-карты назначается уникальное расширение файла, полученное из его уровня, в виде «bXX», где «XX» заменяется 0 ведущим номером уровня MIP-карты, например «b08» для уровня MIP-карты 8 и «b10» для уровня MIP-карты 10. . Размер фрагмента данных MIP-карты – это размер файла, в котором он находится.

Способ хранения блоков данных MIP-карты в версии 0 может быть напрямую несовместим с некоторыми API ввода-вывода изображений. Для их декодирования API должен поддерживать обработку или получение пути к файловой системе, а не только обработку файлового потока в файле BLP. Из-за этого и того, насколько необычны файлы версии 0, поддержка считается необязательной. За исключением того, как получаются фрагменты данных mipmap, версии 0 и 1 в основном идентичны, поэтому можно сделать преобразователь версии 0 в 1 без потерь, чтобы обеспечить поддержку версии 0 для считывателя версии 1.

Заголовки содержания

Следующим в потоке является заголовок контента, который определяется полем контента. Заголовок содержимого — это последняя последовательная структура, которую можно прочитать из файла BLP.

Заголовки содержимого используются для настройки декодера для фрагментов данных MIP-карт.

Содержимое JPEG

Для файлов CONTENT_JPEG BLP используется следующий заголовок.

Поле jpegHeaderSize определяет размер фрагмента заголовка в байтах, добавляемого к началу всех блоков данных mipmap для создания допустимого изображения JFIF. Сразу за ним следует сам jpegHeaderChunk. Механизм конкатенации фрагментов означает, что не требуется, чтобы jpegHeaderSize был не равен 0, поскольку фрагмент данных mipmap может включать в себя полный файл JPEG. При работе с blp-файлами с параметром hasMipmaps, равным 0, данные MIP-карты не требуют размера, отличного от 0, поскольку сам jpegHeaderChunk может быть полным файлом JPEG.

Максимальное допустимое значение jpegHeaderSize — 624 байта (0x270). Большие значения могут привести к повреждению изображения и сбоям в некоторых реализациях чтения BLP, таких как Warcraft III 1.27b, где ограничения буфера строго не соблюдаются. Это ограничение применяется, в частности, при создании файла BLP с содержимым JPEG и без MIP-карт, поскольку оно может предотвратить сброс всего файла JPEG полномасштабного изображения в jpegHeaderChunk и использование пустого блока MIP-карты. Если встречаются значения больше 624, рекомендуется сгенерировать предупреждение и продолжить загрузку в обычном режиме, используя больший размер.

Если jpegHeaderSize приводит к тому, что jpegHeaderChunk выходит за пределы EOF или слишком велик, то Warcraft III подвержен сбою из-за переполнения буфера. В таком случае размер фрагмента заголовка JPEG следует уменьшить, чтобы он поместился в файле, и рекомендуется создать предупреждение.

Для файлов CONTENT_DIRECT BLP используется следующий заголовок.

Массив полей cmap — это таблица поиска цветов, используемая для индексированной цветовой модели. Каждый элемент представляет 24-битные значения компонентов цвета RGB в порядке 0xBBGGRR. Последний байт является дополнением выравнивания и никак не изменит декодированное изображение. Можно было бы улучшить сжимаемость файла, тщательно выбрав значения заполнения.

Важно отметить, что cmap всегда должен присутствовать для CONTENT_DIRECT, даже если он не требуется для декодирования изображения. Это может произойти с файлами версии 2, в которых существуют прямые форматы без индексной цветовой модели. В таком случае cmap следует оставить равным нулю, чтобы обеспечить лучшее сжатие.

Блоки данных MIP-карт

Блоки данных MIP-карт содержат данные изображения, которые при декодировании создают уровень MIP-карт.

Данные Mipmap JPEG

Фрагменты данных mipmap CONTENT_JPEG имеют следующий формат.

Значения компонента можно получить, добавив jpegChunk к jpegHeaderChunk и декодировав полученный файл JPEG с помощью совместимого кодека JPEG. Файл JPEG содержит 8-битные цветовые компоненты BGRA. Это нестандартно для файлов JPEG, которые обычно состоят из 8-битных компонентов цвета Y'CbCr. Таким образом, сохраненные компоненты должны использоваться непосредственно перед тем, как кодеки выполнят преобразование цвета Y'CbCr, что многие кодеки будут делать автоматически. Например, при программировании на JAVA стандартный декодер ImageIO JPEG требует, чтобы JPEG декодировался как растр, а не как BufferedImage, чтобы избежать автоматического преобразования цветового пространства.Blizzard использует устаревшую платформу Intel Imaging Framework для создания/декодирования содержимого JPEG, что означает, что каждый jpegHeaderChunk официальных файлов BLP содержит свою подпись. Использование встроенной подписи является необязательным и, вероятно, зависит от используемого кодировщика JPEG.

Подвыборка цветности невозможна или, скорее всего, приведет к плохим результатам, поскольку вместо обычного Y’CbCr используются цветовые компоненты BGRA. Из-за линейного цветового пространства, используемого файлами BLP, сжатие JPEG с потерями должно визуально влиять на высокие значения компонентов меньше, чем на низкие значения компонентов, что не является идеальным и, вероятно, поэтому файлы BLP2 никогда не содержат содержимое JPEG.

Поскольку jpegChunk представляет собой изображение JPEG, он определяет свою ширину и высоту отдельно от полей ширины и высоты заголовка BLP. Внутренняя высота и ширина должны соответствовать ожидаемым размерам для уровня MIP-карты, для которого предназначен jpegChunk. Некоторые плохо написанные инструменты компоновки BLP не могут сделать это для высоких уровней MIP-карты, что приводит к декодированным изображениям MIP-карты, которые не соответствуют логике масштабирования MIP-карты. Известно, что такие MIP-карты вызывают фатальную ошибку на некоторых версиях Mac. Для соответствия характеристик версии Warcraft III для Windows такие изображения должны загружаться с правым и нижним краями, используемыми для обрезки или увеличения изображения до соответствующих размеров. Отступ выполняется прозрачным черным цветом (0, 0, 0, 0).

Индексированные данные Mipmap

CONTENT_DIRECT Фрагменты данных MIP-карты, представляющие индексированную цветовую модель, имеют следующий формат.

Функция getMipmapPixelCount возвращает произведение поля высоты и ширины после масштабирования для соответствующего уровня мип-карты с использованием логики масштабирования мип-карты. В Warcraft III количество байтов, прочитанных для чанка, не зависит от mipmapSize[this], и он всегда считывает требуемое количество байтов, даже если эти байты небезопасно выходят за границы буфера. Общая длина обоих полей массива в байтах должна соответствовать размеру mipmapSize[this]. Если ожидаемый размер фрагмента не соответствует размеру mipmapSize, рекомендуется изменить размер базового буфера в зависимости от реализации до ожидаемого размера и создать предупреждение.

Значения компонентов BGR можно получить, используя значения indexedRGB в качестве индекса в lutBGR. При создании таких значений с помощью сопоставления цветов помните о линейной природе цветового пространства. Для достижения наилучших результатов рекомендуется выполнять согласование цветов в sRGB или других воспринимаемых цветовых пространствах.

Альфа-компонент может быть получен путем разбиения indexedAlpha на битовое поле фрагментов битовой длины alphaBits и последующего использования битового фрагмента в качестве альфа-значения для пикселя. Компоненты альфа-пикселя упорядочены от младшего к старшему биту, причем байты следуют тому же порядку пикселей, что и indexedRGB. Поскольку альфа-канал имеет точность alphaBits, может потребоваться передискретизация до 8 бит, что может быть полезно в зависимости от используемой среды обработки изображений.

Пример различной альфа-упаковки в байте.

Пиксели в массивах располагаются строками сканирования слева направо сверху вниз. Длина строки сканирования и количество строк сканирования определяются из полей ширины и высоты после применения логики масштабирования MIP-карты.

При создании данных MIP-карты следует использовать алгоритм, соответствующий исходному цветовому пространству. Простое усреднение подходит только для линейного цветового пространства RGB.

Для большинства целей MIP-карты высокого уровня обычно настолько визуально незначительны, что визуальная правильность может быть принесена в жертву размеру файла. В случае проиндексированного контента это может быть достигнуто путем указания блока данных изображения внутри одного из MIP-карт более низкого уровня. В случае содержимого JPEG можно использовать стандартные поля jpegChunk, оптимизированные вручную для размера файла. Во всех случаях требуется, чтобы размер mipmapSize был правильным, существовало соответствующее количество мип-карт и чтобы мип-карты имели правильные размеры.

Читайте также: