MotoFan.Ru — всё для Motorola > Разработки > Ломаем и строим! > Эльфы, их разработка и портирование

Разработчикам: Bmp2ahi Полная версия

 av G-XaD

 6.11.2009, 13:26

Usage:
bmp2ahi.exe [-bin] [-o output_file.c] <image.bmp>

Очередность параметров может быть любой.
[-bin] - Сохранить результат как бинарный файл. Если не задан, то на выходе исходный код.
<image.bmp> - Исходный файл. Обязательный параметр.


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

Что делает:
  1. читает bmp
  2. разворачивает (если нужно) строки
  3. преобразует 24 битные изображения в RGB565
  4. преобразует 8 битные изображения в массивы индексов и палитры
  5. сохраняет как исходный код (.c) или бинарный файл
Поддерживаются только 24, 8 и 1 битные изображения.
8 и 1 - битные изображения не преобразуются!


Преобразование в исходный код. (без ключа -bin)
на выходе получается исходный код для Си вида:
Цитата
const unsigned char bmp_<имя_картинки>_data[XXXX] = {
/* данные */
};

const AHIBITMAP_T bmp_<имя_картинки> =
{ <ширина>, <высота>, (void *)bmp_<имя_картинки>_data, <байт_на_строку>, <AHIFMT_16BPP_565/AHIFMT_1BPP> };

дальше глобальную константу bmp_<имя_картинки> можно использовать в ф-ции AhiDrawBitmapBlt и подобным.

Преобразование в бинарный файл. (с ключем -bin)
На выходе получается бинарный файл с битовым массивом, преобразованным в RGB565 и развернутыми (если нужно) строками.


Исходный код и скомпилированная программа лежат по адресу svn://svn.vilko.ru/motoelf_utils/bmp2ahi
Собрать из исходников можно с помощью MinGW + GNU Make

 av Campanula

 6.11.2009, 14:20

Well done!thanks

 av baat

 6.11.2009, 14:32

Рад что ты с нами! )

  DOMAN

 6.11.2009, 16:37

а если на русский перевести... что нам,обычным пользователям, это даст? и что это улучшает?

 av fkcoder

 6.11.2009, 17:00

Цитата
а если на русский перевести... что нам,обычным пользователям, это даст? и что это улучшает?

Цитата
Небольшая утилита для разработчиков, которые используют в эльфах ATI драйвер для рисования

Если ты не разработчик то ничего

 av gimrock

 6.11.2009, 19:03

DOMAN,
разработчикам будет легче писать более красивые и быстрые эльф-приложения и радовать ими нас, обычных пользователей tongue.gif

 av beelineman

 6.11.2009, 19:56

Круто! (Кузя (с) )
Скоро будут кавайные проги. Представляю как радуется baat smile.gif





--------------------------------------------------------
у baat такая утилитка уже была) корявой рукой написаная, он даж вылаживал её нароботки...
baat рад, что G-XaD вернулся! clap.gif

+[baat]

 av CrayZor

 6.11.2009, 20:22

Спасибо наконец.... Это то что мне нужно....

--------------------------------------------------------
да да) теперь эльфы сами писатся будут)
ждём твои новые эльфов на ати! желательно под еп2 и красочных, а то ты всё никак не соберёшься свои проекты доделать, поначинал столько...


+[baat]

 no av fean0r

 10.11.2009, 7:06

Thnx. А то фотошоп+винхекс уж очень неудобная связка)

 av baat

 18.11.2009, 15:36

G-XaD, почему картинку монохромную 32х43 переводит, а 35х47 нет? пишет неверный размер... хотя 50х50 и больне произвольного размера переводит...

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

какая-то кратность у монохрома нехорошая...4 картинки из 36 (или 1 картинок из 24) подряд выводимых(даже в случайном порядке) не рисует, выводит чёрным квадратом... и ребутит если повторно выводить ту, на которой глюкануло...

хотя при 24битах всё идеально с тем же кодом один в один...

 av G-XaD

 18.11.2009, 21:12

baat,
баги наверное, я не обещал идеальную работу. Нужны конкретные примеры картинок для тестов.

Цитата
почему картинку монохромную 32х43
Могу предположить - потому, что 32 кратно 8 :)

 av baat

 19.11.2009, 7:18

а 25х25, 50х50 кратно? но делает же... Нажмите для просмотра прикрепленного файла
в паинте сделай картинку монохромную...
Ctrl+E размер в пиксилях... сохранить как... монохромный рисунок...

при выводе глюки не у созданого тобой, скорее всего, а у мотора... потому как с 24бита всё выводит, все картинки... а с монохромом определённые нет, и каждый раз разные... но по какой-то закономерности непонятной...

просто думал может кто-то в курсе...

 av G-XaD

 19.11.2009, 10:04

baat,
Все ясно, stride считается неправильно
Цитата
bm_stride = (bm_w * bit_count/8 + 3)&(0xFFFFFFFC);

Тут должно считаться сколько байт занимает одна строка изображения округляя это число до 4 в большую сторону.
Должно получиться 8, а выходит 4.

Исправил Нажмите для просмотра прикрепленного файла.


Монохромную картинку я использовал только для вывода шрифта с прозрачностью и задачей цвета.

Цитата
/* Копирует изображение из системной памяти на поверхность-приёмник
palette - указатель на палитру
Если flags == 1, то у битовых изображений "0" (фон) будет прозрачным,
если flags == 2, то прозрачная "1"
*/
UINT32 AhiDrawBitmapBlt( AHIDEVCONTEXT_T devCx,
AHIRECT_T *dstRect,
AHIPOINT_T *srcPt,
AHIBITMAP_T *bitmap,
void *palette,
UINT32 flags );

Возможно тут корень твоей проблемы?


 av baat

 20.11.2009, 8:05

G-XaD, AhiDrawBitmapBlt, и вывожу...
новая версия утилитки... что старой, что новой одинаково перевело, байт в байт...но глюк остался...и именно с монохромом...
может быть AhiDrawBitmapBlt для ч/б рисунков не подходит? чем ещё можно вывести?..
какие есть предположения?.. что может кто посовтовать?.. может как-то перемудрить с выводом?..

с палитрой вообще не выходит с 16 цветами... вообще левак выводит...

использую AhiDrawBitmapBlt(dCtx, &r, &p, bmp_111, &pall, 1);

где,
UINT32 pall[16] = {0xFF,0xFC,0x7F,0xFE,0x5E,0x6B,0x7D,0x7F,0xBF,0xFD,0xCD,0x77,0xFE,0x2F,0xDC,0xFF
};

const unsigned char bmp_111_data[1376] = {...}; со значениями от 0...15...

const AHIBITMAP_T bmp_111 = { 32, 43, (void *)bmp_111_data, 32, AHIFMT_4BPP };

с 24битами и монохромом работает, правда с монохромом глюки...

 av Andy51

 20.11.2009, 14:58

baat, палитра у тебя блин должна быть UINT16 и с цветами в 565, и при этом она используется только если источник - 8битный, если память не изменяет

 av baat

 20.11.2009, 17:47

Andy51, да пробывал я уже по разному, ладно, тогда может кто знает как монохромную картинку вывести? не через AhiDrawBitmapBlt(dCtx, &r, &p, bmp_111, NULL, 1);

 av G-XaD

 20.11.2009, 19:32

Цитата(baat @ Сегодня, 10:05)
новая версия утилитки... что старой, что новой одинаково перевело, байт в байт...но глюк остался...и именно с монохромом...
*

Конечно, там только по другому считается stride для монохромных. Теперь утилита преобразует картинки размером 35х47. Больше никаких изменений небыло.

Цитата(baat @ Сегодня, 10:05)
может быть AhiDrawBitmapBlt для ч/б рисунков не подходит? чем ещё можно вывести?..
*

Должна подходить, правда я работу утилиты с монохромными почти не проверял.
У меня была монохромная картинка шрифта переведенная в код вручную, я просо испытал на ней утилиту и проверил пару байт в массиве созданном утилитой и руками - совпало.
Щас проведу полное тестирование.

Цитата(baat @ Сегодня, 19:47)
AhiDrawBitmapBlt(dCtx, &r, &p, bmp_111, NULL, 1);
*

в данном случае белые пиксели нарисуются цветом заданным через AhiDrawFgColorSet, черные будут прозрачными, тоесть не нарисуются. Это только для монохромного.


и еще, может поможет:
Цитата
G-XaD (23:17:45 26/10/2009)
а если задать рисовать большую область (по высоте или длинне) чем занимает изображение оно не нарисуется.

 av Andy51

 21.7.2010, 13:27

Доработал программу по просьбам трудящихся - теперь есть быстрый хелп и поддержка 8-битных изображений. Поддержка без преобразования - на выходе получается тот же 8-битный массив + массив с палитрой.

 av baat

 21.7.2010, 15:49

Andy51, спасибо от ленивых трудящихся)

Полная версия:


MotoFan.ru (©) 2024    Слушать Radio