motofan logo
       
> 

Разработчикам: Bmp2ahi, конвертер картинки в исходный код

G-XaD
сообщение 6.11.2009, 13:26


Мастер
****

Группа: Разработчики
Сообщений: 171
Регистрация: 6.11.2007
Из: Donetsk City / Ukraine
Пользователь №: 153 083
Модель телефона: E1, k810
Прошивка: r373_g_0e.30.79r

Рейтинг: 323



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


Сообщение отредактировал Andy51 - 21.7.2010, 13:25
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Campanula
сообщение 6.11.2009, 14:20


Мастер
****

Группа: Пользователи
Сообщений: 287
Регистрация: 10.7.2008
Пользователь №: 176 749
Модель телефона: E398

Рейтинг: 123.5



Well done!thanks
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
baat
сообщение 6.11.2009, 14:32


Самый Наглый
******

Группа: В отставке
Сообщений: 1 282
Регистрация: 18.5.2006
Из: Дом, милый дом...
Пользователь №: 83 674
Модель телефона: старая модель...
Прошивка: какая уж есть...
Победитель конкурса 2008


Настроение:
...



Рейтинг: 1535



Рад что ты с нами! )
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
DOMAN
сообщение 6.11.2009, 16:37


Ветеран
*****

Группа: Пользователи
Сообщений: 542
Регистрация: 21.5.2009
Из: солнечная адыгея, майкоп.
Пользователь №: 199 932
Модель телефона: defy pro

Рейтинг: 190



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

Сообщение отредактировал DOMAN - 6.11.2009, 16:40
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
fkcoder
сообщение 6.11.2009, 17:00


Eve
******

Группа: Разработчики
Сообщений: 1 014
Регистрация: 31.1.2006
Из: Новокузнецк
Пользователь №: 68 287
Модель телефона: L9 ATRIX 4G iPhone SE E1

Рейтинг: 650



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

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

Если ты не разработчик то ничего
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
gimrock
сообщение 6.11.2009, 19:03


Мастер
****

Группа: Пользователи
Сообщений: 181
Регистрация: 16.1.2007
Пользователь №: 117 253
Модель телефона: E398>E1
Прошивка: Dream a reality

Рейтинг: 41.5



DOMAN,
разработчикам будет легче писать более красивые и быстрые эльф-приложения и радовать ими нас, обычных пользователей tongue.gif
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
beelineman
сообщение 6.11.2009, 19:56


Мото-писатель
******

Группа: Почётные мотофаны
Сообщений: 1 070
Регистрация: 22.12.2007
Из: Cити 8184
Пользователь №: 157 925
Модель телефона: Defy+, iPad Mini
Прошивка: CM10, iOS 7
Победитель конкурса 2008


Настроение:
^.^



Рейтинг: 372



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





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

+[baat]

Сообщение отредактировал baat - 6.11.2009, 20:59
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
CrayZor
сообщение 6.11.2009, 20:22


Мастер
****

Группа: Пользователи
Сообщений: 168
Регистрация: 22.3.2008
Пользователь №: 167 295
Модель телефона: E398, ROKR E1, X2, G100
Прошивка: In development

Рейтинг: 70



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

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


+[baat]

Сообщение отредактировал baat - 6.11.2009, 21:09
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
fean0r
сообщение 10.11.2009, 7:06


Новичок
*

Группа: Пользователи
Сообщений: 18
Регистрация: 20.8.2009
Из: Архангельск
Пользователь №: 204 892
Модель телефона: Sie S65/58, CX70/56

Рейтинг: 10



Thnx. А то фотошоп+винхекс уж очень неудобная связка)
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
baat
сообщение 18.11.2009, 15:36


Самый Наглый
******

Группа: В отставке
Сообщений: 1 282
Регистрация: 18.5.2006
Из: Дом, милый дом...
Пользователь №: 83 674
Модель телефона: старая модель...
Прошивка: какая уж есть...
Победитель конкурса 2008


Настроение:
...



Рейтинг: 1535



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

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

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

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

Сообщение отредактировал baat - 18.11.2009, 16:12
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
G-XaD
сообщение 18.11.2009, 21:12


Мастер
****

Группа: Разработчики
Сообщений: 171
Регистрация: 6.11.2007
Из: Donetsk City / Ukraine
Пользователь №: 153 083
Модель телефона: E1, k810
Прошивка: r373_g_0e.30.79r

Рейтинг: 323



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

Цитата
почему картинку монохромную 32х43
Могу предположить - потому, что 32 кратно 8 :)
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
baat
сообщение 19.11.2009, 7:18


Самый Наглый
******

Группа: В отставке
Сообщений: 1 282
Регистрация: 18.5.2006
Из: Дом, милый дом...
Пользователь №: 83 674
Модель телефона: старая модель...
Прошивка: какая уж есть...
Победитель конкурса 2008


Настроение:
...



Рейтинг: 1535



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

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

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

Сообщение отредактировал baat - 19.11.2009, 7:27
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
G-XaD
сообщение 19.11.2009, 10:04


Мастер
****

Группа: Разработчики
Сообщений: 171
Регистрация: 6.11.2007
Из: Donetsk City / Ukraine
Пользователь №: 153 083
Модель телефона: E1, k810
Прошивка: r373_g_0e.30.79r

Рейтинг: 323



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

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

Исправил
Прикрепленный файл bmp2ahi.zip   ( 6.98 килобайт ) Кол-во скачиваний: 224
.


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

Цитата
/* Копирует изображение из системной памяти на поверхность-приёмник
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 );

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




Сообщение отредактировал G-XaD - 19.11.2009, 19:54
Прикрепленный файл bmp2ahi.zip   ( 6.98 килобайт ) Кол-во скачиваний: 224
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
baat
сообщение 20.11.2009, 8:05


Самый Наглый
******

Группа: В отставке
Сообщений: 1 282
Регистрация: 18.5.2006
Из: Дом, милый дом...
Пользователь №: 83 674
Модель телефона: старая модель...
Прошивка: какая уж есть...
Победитель конкурса 2008


Настроение:
...



Рейтинг: 1535



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битами и монохромом работает, правда с монохромом глюки...
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Andy51
сообщение 20.11.2009, 14:58


0xFFFF
******

Группа: Разработчики
Сообщений: 832
Регистрация: 28.3.2006
Из: Нижний Новгород
Пользователь №: 76 255
Модель телефона: E398, Milestone 2
Прошивка: 49R w/ElfPack2


Настроение:
^^,



Рейтинг: 1224



baat, палитра у тебя блин должна быть UINT16 и с цветами в 565, и при этом она используется только если источник - 8битный, если память не изменяет
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
baat
сообщение 20.11.2009, 17:47


Самый Наглый
******

Группа: В отставке
Сообщений: 1 282
Регистрация: 18.5.2006
Из: Дом, милый дом...
Пользователь №: 83 674
Модель телефона: старая модель...
Прошивка: какая уж есть...
Победитель конкурса 2008


Настроение:
...



Рейтинг: 1535



Andy51, да пробывал я уже по разному, ладно, тогда может кто знает как монохромную картинку вывести? не через AhiDrawBitmapBlt(dCtx, &r, &p, bmp_111, NULL, 1);
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
G-XaD
сообщение 20.11.2009, 19:32


Мастер
****

Группа: Разработчики
Сообщений: 171
Регистрация: 6.11.2007
Из: Donetsk City / Ukraine
Пользователь №: 153 083
Модель телефона: E1, k810
Прошивка: r373_g_0e.30.79r

Рейтинг: 323



Цитата(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)
а если задать рисовать большую область (по высоте или длинне) чем занимает изображение оно не нарисуется.


Сообщение отредактировал G-XaD - 20.11.2009, 19:34
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Andy51
сообщение 21.7.2010, 13:27


0xFFFF
******

Группа: Разработчики
Сообщений: 832
Регистрация: 28.3.2006
Из: Нижний Новгород
Пользователь №: 76 255
Модель телефона: E398, Milestone 2
Прошивка: 49R w/ElfPack2


Настроение:
^^,



Рейтинг: 1224



Доработал программу по просьбам трудящихся - теперь есть быстрый хелп и поддержка 8-битных изображений. Поддержка без преобразования - на выходе получается тот же 8-битный массив + массив с палитрой.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
baat
сообщение 21.7.2010, 15:49


Самый Наглый
******

Группа: В отставке
Сообщений: 1 282
Регистрация: 18.5.2006
Из: Дом, милый дом...
Пользователь №: 83 674
Модель телефона: старая модель...
Прошивка: какая уж есть...
Победитель конкурса 2008


Настроение:
...



Рейтинг: 1535



Andy51, спасибо от ленивых трудящихся)
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Разработчикам: Bmp2ahi, конвертер картинки в исходный код · Эльфы, их разработка и портирование · Forum
 

Ответ в темуСоздание новой темы
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 28.7.2025, 1:41

Форум живёт: