RazArt
offline
Опыт:
11,197Активность: |
Открытие BLP формата
Пишу программу (Visual Basic), необходимо открытие BLP текстуры, могут отписаться те ктознаком с этим, ну или выложить ссылки на примеры. Юзав гугл я нашёл всего лишь 1 пример(http://forum.valhallalegends.com/index.php?topic=14286.0) открытия, но программа просто зависала при выполнении кода
|
23.02.2009, 00:13 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ShadoW DaemoN
offline
Опыт:
37,078Активность: |
Для начала советую ознакомиться с Magos BLP file specification
Варовские BLP делятся на два типа - палитровые и сжатые (с помощью jpeg). Палитровые можно открывать без дополнительных модулей. 1. Прочитать палитру (обычно она начинается с адреса $009C), в массив. 2. Прочитать блок данных индексов (руководствуясь начальной позицией aka оффсетом, записанным в $001C, и размером блока, записанным в $005C). 3. Сопоставить каждый индекс в блоке данных цвету из палитры. То есть организовать цикл чтения побайтово (на входе 8-битное index), и возвращать соответствующее значение из палитры (на выходе 32-битное palette[index]). Сжатые открываются ненамного сложнее. 1. Прочитать заголовок по адресу $00A0 (если значение в $009C больше нуля). 2. Прочитать блок данных jpeg (руководствуясь начальной позицией aka оффсетом, записанным в $001C, и размером блока, записанным в $005C). 3. Загнать все это в jpeg декодер с параметрами: Код:
Собственно, я написал библиотеку (с помощью которой можно читать и записывать BLP), API скину, если решишь использовать ее. |
23.02.2009, 10:38 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
RazArt
offline
Опыт:
11,197Активность: |
Вообще я пишу на VB. Вот листинг загрузки самого изображения:
» Загрузка Код:
» Мои действия Код:
Я получаю хендл изобрбажения BLP, а когда хочу его отрисовать, то ничего не происходит. А за библиотеку и API буду очень благодарен, но всёже хочется ещё и самому написать, чтобы не таскать с собой диллки |
23.02.2009, 10:45 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Van Damm
wait... what?
offline
Опыт:
22,268Активность: |
2 swdn: я бы не отказался от API =) Давно хочется конверсии больших картинок, а ни одна прога не делает. Так хоть сам напишу по-быстренькому.
|
23.02.2009, 12:00 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
RazArt
offline
Опыт:
11,197Активность: |
А я хочу написать удобную смотрелку blp'ешок, а то их просматривать не удобно =) Ну конечно всяких рюшечек прикручу туда) |
23.02.2009, 12:24 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
NETRAT
offline
Опыт:
83,762Активность: |
Van Damm я собсна swdn'у то же самое говорил - делай библиотеку что бы ее юзать другие девелоперы могли =) она есть!
ijl15.dll сосет по известным всем причинам |
23.02.2009, 12:27 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ShadoW DaemoN
offline
Опыт:
37,078Активность: |
RazArt, хмм, боюсь тебя огорчить, но я тоже собирался писать удобный вьювер для BLP =) (исходя из содержания некоторых тем академии, как раз его-то многим модмейкерам и не хватает, ну и просто "для себя").
Может быть, стоит создать отдельную тему для библиотеки? |
23.02.2009, 14:39 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
RazArt
offline
Опыт:
11,197Активность: |
А эта чем не тема для библиотеки? Да и кста, у нас монополия на вьюверы?)
RazArt добавил: Так ты выложишь библиотеку? |
23.02.2009, 14:49 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ShadoW DaemoN
offline
Опыт:
37,078Активность: |
вот она, вот она, на ногу намотана =)
API для библиотеки:
BLP_LoadFromMemoryКод:
Загружает из BLP выбранное изображение.
BLP_SaveToMemoryКод:
Сохраняет изображение в BLP файл.
BLP_GetHeaderКод:
Если лень вытащить заголовок BLP файла самому...
BLP_SetHeaderКод:
Заполняет существенные параметры заголовка BLP
Ах да, чуть не забыл: Код:
Структура заголовка файла BLP версии 1. Чтобы сэкономить место, я запихал в библиотеку еще процедуры открытия и сохранения jpeg (нуачо, иметь одинаковые *.obj в УЧУ-шнике и библиотеке - это моветон как минимум ^_^) Код:
Отредактировано ShadoW DaemoN, 23.02.2009 в 15:51. |
23.02.2009, 15:44 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
NETRAT
offline
Опыт:
83,762Активность: |
а я собирался писать правильный MPQ архиватор с плагинами оптимизатора, взломщика и просмотрщика mdx и blp (примерно так как это было в biturn или w3viewer)
NETRAT добавил: не не, надо отдельную тему в барахолку |
23.02.2009, 15:52 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
adic3x
offline
Опыт:
107,539Активность: |
а где опенСорц что бы светлые умы человечества могли ее улучшить ? ;) |
23.02.2009, 17:39 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
tysch_tysch
Работаем
online
Опыт: отключен
|
напишите лучше плагин для ирфана http://www.irfanview.com/
|
23.02.2009, 20:40 | #12
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
FaB0SS
offline
Опыт:
2,504Активность: |
ShadoW DaemoN
Что я не так делаю? 1.Читаю файл blp в поток(пробовал и массив char'ов) 2.Вызываю твою функцию BLP_LoadFromMemory c параметрами: 1-й - адрес массива char'ов файла blp; 2-й - 0; 3-й - адрес массива структур RGBQUAD » RGBQUAD 4-й - int size;Код:
И ничего не получается... |
06.03.2009, 21:31 | #13
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Кет
offline
Опыт:
111,234Активность: |
Цитата:
А еще лучше расширение ядра windows =) |
|
06.03.2009, 21:53 | #14
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
FaB0SS
offline
Опыт:
2,504Активность: |
Все, большое спасибо, сам разобрался, в 4-тый параметр надо передавать не саму переменную, а адрес переменной ;) Теперь работает =)
P.S. Урааа-ааа!!! FaB0SS добавил: А вот с "BLP_GetHeader" что-то не получается... =/ |
07.03.2009, 01:22 | #15
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ShadoW DaemoN
offline
Опыт:
37,078Активность: |
FaB0SS,
1. Параметр входящий, указатель на массив байтов BLP-файла. 2. Параметр исходящий, указатель на структуру TBLP1_Header (которая занимает 156 байт, кстати). Выделять память под структуру, конечно, нужно. Или, как вариант, можно объявить указатель my_pointer, выделить под него место в памяти GetMem(my_pointer, sizeof(TBLP1_Header)) байтов, а затем привести к указателю на заголовок pBLP1_Header(my_pointer) и работать с ним. ZlaYa1000, ненене, в топку, во-первых, автор не выложил SDK для плагинов, во-вторых, не хочу его софтину поддерживать. |
07.03.2009, 14:10 | #16
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
FaB0SS
offline
Опыт:
2,504Активность: |
ShadoW DaemoN
Да я уже сам его вытащил... |
07.03.2009, 14:53 | #17
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|