Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Сб окт 21, 2017 3:13 pm

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 65 сообщений ]  На страницу Пред. 1 2 3 4 5 След.
Автор Сообщение
 Заголовок сообщения: Re: libimg
СообщениеДобавлено: Сб май 26, 2012 8:05 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Вт май 08, 2007 12:44 am
Сообщения: 340
dunkaist
В английской Википедии вроде вполне подробное описание формата, даже с разбиением на версии. Отсылка к BITMAPINFOHEADER -- и есть документация Microsoft, далее по ссылкам.

_________________
Разработчик языка программирования Кантор


Вернуться к началу
 Заголовок сообщения: Re: libimg
СообщениеДобавлено: Сб май 26, 2012 9:39 pm 
Не в сети
Mentor
Аватара пользователя

Зарегистрирован: Пн окт 19, 2009 10:58 am
Сообщения: 329
Freeman, ты же сам прекрасно понимаешь, чем спецификация от описания отличается. По ссылкам я сходил.

Всё оказалось проще. Структуры были описаны в bmp.inc довольно хитрым образом, поэтому длины для проверки вбивались руками. Не все варианты были учтены.

Но после этого 3х5 картинка всё равно не захотела открываться из-за бага в img.flip.layer. Заменил цикл с постусловием на цикл с предусловием. Вроде, всё работает.


Вернуться к началу
 Заголовок сообщения: Re: libimg
СообщениеДобавлено: Вс май 12, 2013 12:55 am 
Не в сети
Mentor
Аватара пользователя

Зарегистрирован: Пн окт 19, 2009 10:58 am
Сообщения: 329
Коротко об изменениях в библиотеке за прошедший год:
  • Добавлены типы изображений, поддерживаемые 65-й функцией: grayscale, 2-х и 4-х битные типы с палитрой.
  • Появилась поддержка некоторых расширений формата tiff. Из заметных глазу можно отметить чтение lzw-сжатых изображений.
  • Новые функции: img.scale и img.convert для масштабирования изображения и преобразования его представления (глубины цвета и т.д.)
  • Существенно обновлён декодер tga, поддержка нового формата xbm (XBitMap).
  • Исправлены некоторые баги, убран лимит на размер декодированного изображения.

Прежняя просьба прикреплять изображения, которые не открываются или отображаются неправильно.


Вернуться к началу
 Заголовок сообщения: Re: libimg
СообщениеДобавлено: Вс май 12, 2013 1:10 am 
Не в сети
Kernel Developer

Зарегистрирован: Вс фев 10, 2013 12:37 pm
Сообщения: 2329
dunkaist писал(а):
[*]Добавлены типы изображений, поддерживаемые 65-й функцией: grayscale, 2-х и 4-х битные типы с палитрой.

Из опыта проектирования и реализации zSea могу посоветовать переделать с конвертированием в 8-и битное. В дальнейшем с размерностями не кратными байту возникают проблемы с выводом - например, с прокруткой больших или сильно масштабирован изображений. Приходится либо прокручивать на количество точек содержащееся в одном байте за транзакцию, либо использовать все в кратном байту разрешении.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Вернуться к началу
 Заголовок сообщения: Re: libimg
СообщениеДобавлено: Вс май 12, 2013 1:45 am 
Не в сети
Mentor
Аватара пользователя

Зарегистрирован: Пн окт 19, 2009 10:58 am
Сообщения: 329
Mario_r4 писал(а):
Из опыта проектирования и реализации zSea могу посоветовать переделать с конвертированием в 8-и битное. В дальнейшем с размерностями не кратными байту возникают проблемы с выводом - например, с прокруткой больших или сильно масштабирован изображений. Приходится либо прокручивать на количество точек содержащееся в одном байте за транзакцию, либо использовать все в кратном байту разрешении.
Да, действительно, отступ внутри байта никак не задать. Думаю, перекодировать имеет смысл просмотрщику, который захочет, скажем, масштабировать (всё равно масштабирование для 2-х бит я писать не буду). Как раз для этого img.convert появилась. Но совсем переписывать смысла не вижу, ведь если есть файлы в таких форматах и их вывод поддерживается ядром, то пусть и libimg умеет с ними "нативно" работать.

У меня сейчас другой вопрос: как отображать иконки, если они не влезают в окно? Допустим, есть иконка, в ней семь фреймов, по длине не умещаются в окно.

Пусть ширина всех фреймов вместе -- 707 пикселей, иконки одинаковые.

Первый случай: ширина области, куда можно рисовать -- 700 пикселей. Масштабировать каждую на -1 пиксель? Мыло, но ещё куда ни шло.
Второй случай: ширина области для рисования -- 704 пикселя. Всё равно масштабировать каждую на -1? Или только три из них? Но это будет выглядеть странно, т.к. все иконки одинаковые, но часть отображается нормально, а часть замылена.


Вернуться к началу
 Заголовок сообщения: Re: libimg
СообщениеДобавлено: Вс май 12, 2013 1:55 am 
Не в сети
Kernel Developer

Зарегистрирован: Вс фев 10, 2013 12:37 pm
Сообщения: 2329
dunkaist писал(а):
У меня сейчас другой вопрос: как отображать иконки, если они не влезают в окно? Допустим, есть иконка, в ней семь фреймов, по длине не умещаются в окно.

Пусть ширина всех фреймов вместе -- 707 пикселей, иконки одинаковые.

Первый случай: ширина области, куда можно рисовать -- 700 пикселей. Масштабировать каждую на -1 пиксель? Мыло, но ещё куда ни шло.
Второй случай: ширина области для рисования -- 704 пикселя. Всё равно масштабировать каждую на -1? Или только три из них? Но это будет выглядеть странно, т.к. все иконки одинаковые, но часть отображается нормально, а часть замылена.

Скроллбар использовать религия запрещает?

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Вернуться к началу
 Заголовок сообщения: Re: libimg
СообщениеДобавлено: Вс май 12, 2013 2:00 am 
Не в сети
Mentor
Аватара пользователя

Зарегистрирован: Пн окт 19, 2009 10:58 am
Сообщения: 329
Mario_r4 писал(а):
Скроллбар использовать религия запрещает?
Я имею в виду режим масштабирования изображения под размер окна. В таком режиме по определению всё должно вмещаться в окно без всяких скроллбаров.

Дело в том, что у меня нет под рукой просмотрщиков, которые бы показывали иконки в ряд. Если кто-нибудь пользуется такими, было бы интересно узнать, как они ведут себя в такой ситуации.


Вернуться к началу
 Заголовок сообщения: Re: libimg
СообщениеДобавлено: Вс май 12, 2013 2:16 am 
Не в сети
Kernel Developer

Зарегистрирован: Вс фев 10, 2013 12:37 pm
Сообщения: 2329
dunkaist писал(а):
В таком режиме по определению всё должно вмещаться в окно без всяких скроллбаров.

Имеет смысл масштабировать общее изображение, на котором все иконки. Плевать на замыленность - пользователь ССЗБ, раз выбрал такой режим.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Вернуться к началу
 Заголовок сообщения: Re: libimg
СообщениеДобавлено: Вс май 12, 2013 3:10 am 
Не в сети
Designer
Аватара пользователя

Зарегистрирован: Чт янв 25, 2007 3:33 pm
Сообщения: 4221
Не нужно маштабировать иконки. Лучше обрезать или выводить в 2 ряда.
Очень не хватает в kiv функции, которая есть в zSea, - "вписать в окно". Из-за этого в kiv, а значит в Колибри в общем, просто невозможно смотреть фотографии.

_________________
Через тернии к звездам


Вернуться к началу
 Заголовок сообщения: Re: libimg
СообщениеДобавлено: Пн мар 24, 2014 12:20 am 
Не в сети
Designer
Аватара пользователя

Зарегистрирован: Чт янв 25, 2007 3:33 pm
Сообщения: 4221
Наверно я чтото делаю не так...

> WebView
> нужно сделать загрузку цветов из скина
Есть код:
Код:
skin.image = load_image(abspath("wv_skin.png"));
skin.w = DSWORD[skin.image+4];
skin.h = DSWORD[skin.image+8];
img_draw stdcall(skin.image, 0, 0, skin.w, skin.h, 101, 0); //вывести изображение

Изображение прекрасно выводится. НО.
Как я могу получить цвет первого пикселя из этого изображения? Следующий код не работает.
Код:
first_pixel_color = DSDWORD[skin.image+12];
first_pixel_color = DSDWORD[skin.image+30];

_________________
Через тернии к звездам


Вернуться к началу
 Заголовок сообщения: Re: libimg
СообщениеДобавлено: Пн мар 24, 2014 12:44 am 
Не в сети
Kernel Developer

Зарегистрирован: Вс фев 10, 2013 12:37 pm
Сообщения: 2329
Leency писал(а):
Наверно я чтото делаю не так...

> WebView
> нужно сделать загрузку цветов из скина

Есть альтернативный способ, котором пользуется большинство разработчиков. Можно положить в ту же директорию, где лежит файл скина, еще и INI файл (например, skin.ini) и воспользоваться сервисами LibINI.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Вернуться к началу
 Заголовок сообщения: Re: libimg
СообщениеДобавлено: Пн мар 24, 2014 1:31 am 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Пт июн 30, 2006 9:01 am
Сообщения: 1229
Leency писал(а):
Наверно я чтото делаю не так...

> WebView
> нужно сделать загрузку цветов из скина
Есть код:
Код:
skin.image = load_image(abspath("wv_skin.png"));
skin.w = DSWORD[skin.image+4];
skin.h = DSWORD[skin.image+8];
img_draw stdcall(skin.image, 0, 0, skin.w, skin.h, 101, 0); //вывести изображение

Изображение прекрасно выводится. НО.
Как я могу получить цвет первого пикселя из этого изображения? Следующий код не работает.
Код:
first_pixel_color = DSDWORD[skin.image+12];
first_pixel_color = DSDWORD[skin.image+30];


Colors are 24-bit, need to do logical AND with 0x00ffffff.
Also possible that it's required to swap colors from "BGR" to "RGB" but i'm not sure.

_________________
"Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction." Albert Einstein


Вернуться к началу
 Заголовок сообщения: Re: libimg
СообщениеДобавлено: Пн мар 24, 2014 1:08 pm 
Не в сети
Mentor
Аватара пользователя

Зарегистрирован: Пн окт 19, 2009 10:58 am
Сообщения: 329
Leency,

DSDWORD[skin.image+24] -- это указатель на raw изображение

Не знаю, что за DSDWORD, но думаю, что следующий псевдокод разъяснит:
Код:
pixel *raw = DSDWORD[skin.image+24];   // указатель на пиксели
first_pixel_color = raw[0];


Последний раз редактировалось dunkaist Пн мар 24, 2014 2:08 pm, всего редактировалось 1 раз.

Вернуться к началу
 Заголовок сообщения: Re: libimg
СообщениеДобавлено: Пн мар 24, 2014 1:12 pm 
Не в сети
Designer
Аватара пользователя

Зарегистрирован: Чт янв 25, 2007 3:33 pm
Сообщения: 4221
О, спасибо. Попробую.

_________________
Через тернии к звездам


Вернуться к началу
 Заголовок сообщения: Re: libimg
СообщениеДобавлено: Пн мар 24, 2014 11:58 pm 
Не в сети
Designer
Аватара пользователя

Зарегистрирован: Чт янв 25, 2007 3:33 pm
Сообщения: 4221
col_bg = DSDWORD[skin.image+24];
Сделал, получаю цвет 105000 вместо E4DFE1.
В чём может быть проблема?

строка $and col_bg, 0x00ffffff ничего не меняет.
Я не понимат T_T

_________________
Через тернии к звездам


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 65 сообщений ]  На страницу Пред. 1 2 3 4 5 След.

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB