![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
SGTeam |
|
||||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 17.7.2006 Репутация: нет Всего: нет |
Здравствуйте уважаемые,надеюсь вы мне поможите с моими затруднениями возникшими в процессе разработки.Я использую Kol+MCK, но это не суть важно.И так:
Файл грубо говоря выглядит следующим образом
Считываю данные следующим образом:
Собственно трудности с реализацией расшифровки спрайта - алгоритм выглядит следующим образом: В заголовке спрайта последовательно размещены смещения на каждую из строк спрайта. Наша задача состоит в том, чтобы последовательно перейти на начало каждой строки и по определенной схеме эту строку расшифровать . Да, да , именно расшифровать, потому что этот формат ока- зался не таким уж простым. Во всяком случае - на первый взгляд . Итак, будем считать, что мы перешли к некой строке. Строка состоит из нескольких сегментов. Каждый сегмент состоит из байта-описателя и, собственно, байтов данных. Левые 2 бита байта-описателя определяют тип сегмента (в дальнейшем - Type), остальные 6 бит - длина сегмента (в дальнейшем - Length). Вот возможные типы сегментов и их значения: *** Таблица типов сегментов *************************************************** b00 - Сегмент представляет собой последовательность пикселей. Группа пикселей длиной в Length считывается сразу за байтом - описателем. b01 - Сегмент представляет собой последовательность одинаковых пикселей длиной в Length. Образец пикселя считывается сразу за байтом-описателем. b10 - Сегмент представляет собой последовательность прозрачных пикселей длиной в Length. b11 - Сегмент представляет собой последовательность прозрачных пикселей длиной в Length+64. ******************************************************************************* Рассмотрим конкретный пример строки. *** Образец строки **************************** 86 09 47 8F 8F 44 46 8D 42 8E 49 44 94 01 49 9E *********************************************** 1. Позиция в строке - $00: байт-описатель первого сегмента - $86. Разбиваем его на левую (2 бита) часть и правую (6 бит). Левая равняется b10 - это тип сегмента. Правая - b000110, или d6 - это длина сегмента. Значит, тип равен b10. Следовательно сегмент этот определяет прозрачную строку длиной в 6 пик- селей. Раз пиксель прозрачный, значит его значение нам считывать не нужно - оно всегда равняется $00. Получаем первые 6 пикселей строки. 2. Позиция в строке - $01: байт-описатель второго сегмента - $09. Type=b00, Length=d9. Тип b00 подразумевает чтение группы байтов длиной в 9 и формиро- вания из них строки. 3. Позиция в строке - $0B: байт-описатель третьего сегмента - $44. Type=b01, Length=d4. Раз тип равен b01 , значит строка длиной в 4 пикселя состоит из одинавовых пикселей, образец которого помещается в следующем байте. 4. Позиция в строке - $0D: байт-описатель четвертого сегмента - $01.Type=b00 , Length=d1. Читаем следующий байт. Это и будет короткий сегмент. 4. Позиция в строке - $0F: байт-описатель пятого сегмента - $9E.Type=b10, Length=d30. Это - прозрачный сегмент длиной в 30 пикселов. Таким образом, в сумме все эти сегменты образуют полную строку длиной в 50 пик- селов (6+9+4+1+30). Таким же образом разбираются и остальные строки. Так вот.......Как это реализовать???Заранее благодарен. |
||||
|
|||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
SGTeam, чет я не очень понял, что изображения спрайтов не хранятся в стандартном формате?
Это что самодельная реализация RLE? вообще я бы рекомендовал упростить формат и хранить спрайты в формате png, это и проще и места меньше занимает и автоматически поддержка прозрачности, тем более, что для КОЛ имеется свой компонент png. Это сообщение отредактировал(а) alexeis1 - 4.9.2006, 01:01 -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
SGTeam |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 17.7.2006 Репутация: нет Всего: нет |
В таком вормате их хранить StarCraft....Я и хочу их выдрать, и перевести в какой нибудь другой формат.
|
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
SGTeam, так это уже сделали другие
![]() С Warcraft он работает плохо, а вот StarCraft нормально! Добавлено @ 09:15 http://www.extractor.ru/download_index.phtml -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |