Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [wtl] отрисовка bitmap, как отрисовать bmp 
V
    Опции темы
korbian
Дата 26.9.2007, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 336
Регистрация: 20.2.2007
Где: Penza

Репутация: 1
Всего: 14



здравствуйте, коллеги!
передомной стоит следующая задача:
есть 32-битный bmp файл с альфа каналом, необходимо его преобразовать к 16-битному bmp-файлу с 1 битом на альфа канал. Как преобразовать я понимаю!!!. после преобразования надо вывести исходный и результирующий bmp файл на экран. что мне для этого нужно сделать? поподробнее если можно.

спасибо заранее.


--------------------
korbian ©
PM   Вверх
Rapalex
Дата 26.9.2007, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 732
Регистрация: 20.1.2006
Где: Украина -> Ник олаев

Репутация: 6
Всего: 8



Преобразовать обратно  smile 


--------------------
In vitium ducit culpae fuga.
Желание избежать ошибки вовлекает в другую.
(Horatius)
PM ICQ   Вверх
korbian
Дата 26.9.2007, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 336
Регистрация: 20.2.2007
Где: Penza

Репутация: 1
Всего: 14



я не понял, что вы имеете в виду.


--------------------
korbian ©
PM   Вверх
Rapalex
Дата 26.9.2007, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 732
Регистрация: 20.1.2006
Где: Украина -> Ник олаев

Репутация: 6
Всего: 8



Винда по разному представляет цвет пикселя но альфа канал в 1 бит он точно не поймёт.


--------------------
In vitium ducit culpae fuga.
Желание избежать ошибки вовлекает в другую.
(Horatius)
PM ICQ   Вверх
Slawutich
Дата 26.9.2007, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 14.7.2007
Где: Украина г.Одесса

Репутация: нет
Всего: нет



Цитата

Винда по разному представляет цвет пикселя

Винда прекрасно представляет цвет каждого пикселя иначе досихпор небыло бы ни какой графики все было бы (<256 цветов) но как на практике доказано везде присутствуют картинки более чем 256 цветов.
Другое дело что, стандартный редактор студии не поддерживает 32 бита, так кто им тогда доктор (За что им там деньги платят  smile )

Просто в CBitmap загружаеш картинку 32-х витную и отрисовываеш ее на контексте устройства и нет, ни каких проблем.

Что косается проблемы, на сколько я знаю (альфа конал-это прозрачность пикселя) в BMP файлах нет такого конала.
Ну логически он там конечно есть, потому что любой цвет кодируется 3-мя байтами (краснай 256, зеленый 256 и синий 256) а пиксель весит 4-и байта, 4-й байт просто не используется в BMP, он используется в таких форматах как GIF.

поэтому если имееш дело с BMP то тока вручную, попиксельное копирование в контекст с отсеиванием не нужного цвета.

Сразу извеняюсь если вдруг не правильно понял суть вопроса!
PM MAIL ICQ   Вверх
Alexeis
Дата 26.9.2007, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 3
Всего: 459



Цитата(Slawutich @  26.9.2007,  23:00 Найти цитируемый пост)
Что косается проблемы, на сколько я знаю (альфа конал-это прозрачность пикселя) в BMP файлах нет такого конала.
Ну логически он там конечно есть, потому что любой цвет кодируется 3-мя байтами (краснай 256, зеленый 256 и синий 256) а пиксель весит 4-и байта, 4-й байт просто не используется в BMP, он используется в таких форматах как GIF.

  На самом деле есть просто Microsoft это активно отрицает smile . Если глянуть на функцию AlphaBlend, то в одном из режимов она как раз и накладывает такие битмаки с альфаканалом. Об этом еще косвенно говорит 32х битный режим иконок. Иконки как известно состоят из битмапов, а 32х битмные из битмапок с альфаканалом. А винда прекрасно умеет их рисовать.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Rapalex
Дата 27.9.2007, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 732
Регистрация: 20.1.2006
Где: Украина -> Ник олаев

Репутация: 6
Всего: 8



Цитата(Slawutich @  26.9.2007,  23:00 Найти цитируемый пост)
(альфа конал-это прозрачность пикселя) в BMP файлах нет такого конала

Slawutich, Есть, сомотри прикреплённый файл, и я его в ХР нормально рисую.

И лишний байт на каждый пиксель это место, такчто в файле его хранить нет смысла, в файле хранится только то что надо, это в памяти используетс я DWORD для хранения цвета пикселя, там альфа канал может не использоватся.

Присоединённый файл ( Кол-во скачиваний: 18 )
Присоединённый файл  Open.zip 0,73 Kb


--------------------
In vitium ducit culpae fuga.
Желание избежать ошибки вовлекает в другую.
(Horatius)
PM ICQ   Вверх
zkv
Дата 27.9.2007, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 16
Всего: 92



Цитата(Alexeis @  26.9.2007,  23:21 Найти цитируемый пост)
Об этом еще косвенно говорит 32х битный режим иконок.

о, про иконки наш товарищ чипсет целую статью написал:
32-битные иконки: закат солнца вручную
PM MAIL   Вверх
Alexeis
Дата 27.9.2007, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 3
Всего: 459



  Ну и зря мучался, хрюша то умеет рисовать 32х битные, вот пример

Код

  HINSTANCE hibInst = LoadLibrary ("shell32.dll");
  HRSRC   HicRes    = FindResource(hibInst, MAKEINTRESOURCE(142), RT_ICON);
  int     len       = SizeofResource(hibInst, HicRes);
  HGLOBAL ResIch    = LoadResource(hibInst, HicRes);
  PBYTE   ResIcMem    = (PBYTE)LockResource(ResIch);
  HICON   hIc       = CreateIconFromResourceEx(ResIcMem, len, true, 0x00030000,
                                               48, 48, LR_DEFAULTCOLOR);
  DrawIconEx(Form1->Canvas->Handle, 20, 20, hIc, 48, 48, 0, NULL, DI_NORMAL);
 ......................


  Кто не верит проверьте 142 иконка имеет формат 32 бита на пиксель


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Slawutich
Дата 27.9.2007, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 14.7.2007
Где: Украина г.Одесса

Репутация: нет
Всего: нет



Походу я ошибался  smile  значит надо разобраться с этим вопросом поподробней.
Цитата

На самом деле есть просто Microsoft это активно отрицает
 
Во гады!  smile 

Спасибо всем  за объяснение!
PM MAIL ICQ   Вверх
korbian
Дата 28.9.2007, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 336
Регистрация: 20.2.2007
Где: Penza

Репутация: 1
Всего: 14



действительно, всем спасибо.
по совету Alexeis использовал AlphaBlend().

тему считаю закрытой


--------------------
korbian ©
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.1335 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.