![]()
RazArt
![]() ![]() offline
Опыт:
11,197Активность: |
Открытие BLP формата
Пишу программу (Visual Basic), необходимо открытие BLP текстуры, могут отписаться те ктознаком с этим, ну или выложить ссылки на примеры. Юзав гугл я нашёл всего лишь 1 пример(http://forum.valhallalegends.com/index.php?topic=14286.0) открытия, но программа просто зависала при выполнении кода
|
![]() |
#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 скину, если решишь использовать ее. |
![]() |
#2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
RazArt
![]() ![]() offline
Опыт:
11,197Активность: |
Вообще я пишу на VB. Вот листинг загрузки самого изображения:
» Загрузка Код:
» Мои действия Код:
Я получаю хендл изобрбажения BLP, а когда хочу его отрисовать, то ничего не происходит. А за библиотеку и API буду очень благодарен, но всёже хочется ещё и самому написать, чтобы не таскать с собой диллки |
![]() |
#3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
Van Damm
wait... what?
![]() ![]() offline
Опыт:
19,568Активность: |
2 swdn: я бы не отказался от API =) Давно хочется конверсии больших картинок, а ни одна прога не делает. Так хоть сам напишу по-быстренькому.
|
![]() |
#4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
RazArt
![]() ![]() offline
Опыт:
11,197Активность: |
А я хочу написать удобную смотрелку blp'ешок, а то их просматривать не удобно =) Ну конечно всяких рюшечек прикручу туда) |
![]() |
#5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
NETRAT
![]() ![]() offline
Опыт:
82,062Активность: |
Van Damm я собсна swdn'у то же самое говорил - делай библиотеку что бы ее юзать другие девелоперы могли =) она есть!
ijl15.dll сосет по известным всем причинам |
![]() |
#6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
ShadoW DaemoN
![]() ![]() offline
Опыт:
37,078Активность: |
RazArt, хмм, боюсь тебя огорчить, но я тоже собирался писать удобный вьювер для BLP =) (исходя из содержания некоторых тем академии, как раз его-то многим модмейкерам и не хватает, ну и просто "для себя").
Может быть, стоит создать отдельную тему для библиотеки? |
![]() |
#7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
RazArt
![]() ![]() offline
Опыт:
11,197Активность: |
А эта чем не тема для библиотеки? Да и кста, у нас монополия на вьюверы?)
RazArt добавил: Так ты выложишь библиотеку? |
![]() |
#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. |
![]() |
#9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
NETRAT
![]() ![]() offline
Опыт:
82,062Активность: |
а я собирался писать правильный MPQ архиватор с плагинами оптимизатора, взломщика и просмотрщика mdx и blp (примерно так как это было в biturn или w3viewer)
NETRAT добавил: не не, надо отдельную тему в барахолку |
![]() |
#10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
adic3x
![]() offline
Опыт:
99,989Активность: |
а где опенСорц что бы светлые умы человечества могли ее улучшить ? ;) |
![]() |
#11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
tysch_tysch
Делаем вид
![]() ![]() offline
Опыт: отключен
|
напишите лучше плагин для ирфана http://www.irfanview.com/
|
![]() |
#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;Код:
И ничего не получается... |
![]() |
#13
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
Кет
![]() offline
Опыт:
110,533Активность: |
Цитата:
А еще лучше расширение ядра windows =) |
|
![]() |
#14
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
FaB0SS
![]() offline
Опыт:
2,504Активность: |
Все, большое спасибо, сам разобрался, в 4-тый параметр надо передавать не саму переменную, а адрес переменной ;) Теперь работает =)
P.S. Урааа-ааа!!! FaB0SS добавил: А вот с "BLP_GetHeader" что-то не получается... =/ |
![]() |
#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 для плагинов, во-вторых, не хочу его софтину поддерживать. |
![]() |
#16
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
FaB0SS
![]() offline
Опыт:
2,504Активность: |
ShadoW DaemoN
Да я уже сам его вытащил... |
![]() |
#17
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|