Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.10.2011, 15:23   #1
sover
Пользователь
 
Регистрация: 17.02.2011
Сообщений: 13
По умолчанию работа с HBITMAP

Доброго времени суток.
мне нужно получить из иконки байты цветов, но я не знаю как...
HBITMAP я получил так:

HICON hIconLarge;
ExtractIconEx("q.ico",0,&hIconLarge ,NULL, 1);
ICONINFO oIconInfo;
if(GetIconInfo(hIconLarge, &oIconInfo)==0)
ShowMessage("Error");

oIconInfo.hbmColor;// здесь HBITMAP
а что дальше делать не знаю.
Буду очень благодарен за помощь(=
sover вне форума Ответить с цитированием
Старый 14.10.2011, 15:29   #2
haruhi
Форумчанин
 
Аватар для haruhi
 
Регистрация: 05.10.2011
Сообщений: 368
По умолчанию

конвертирование иконки в битмап
Код:
HBITMAP BitmapFromIcon(HICON hIcon)
{
   HDC hDC = CreateCompatibleDC(NULL);
   HBITMAP hBitmap = CreateCompatibleBitmap(hDC, GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON));
   HBITMAP hOldBitmap = (HBITMAP)SelectObject(hDC, hBitmap);
   DrawIcon(hDC, 0, 0, hIcon);
   SelectObject(hDC, hOldBitmap);
   DeleteDC(hDC);

   return hBitmap;
}
после получения битмапа очень легко получить пиксели через GetDIBits
Не стоит будить спящего Бога! (с) Меланхолия Харухи Судзумии
haruhi вне форума Ответить с цитированием
Старый 14.10.2011, 15:33   #3
sover
Пользователь
 
Регистрация: 17.02.2011
Сообщений: 13
По умолчанию

у иконки же может быть альфа канал, а по моему с помощью GetDIBits можно получить только RGB
sover вне форума Ответить с цитированием
Старый 14.10.2011, 15:39   #4
sover
Пользователь
 
Регистрация: 17.02.2011
Сообщений: 13
По умолчанию

или я где-то не прав ?
sover вне форума Ответить с цитированием
Старый 14.10.2011, 16:06   #5
haruhi
Форумчанин
 
Аватар для haruhi
 
Регистрация: 05.10.2011
Сообщений: 368
По умолчанию

если я не ошибаюсь, то в стандартное windows-иконке альфа-канала нет
Не стоит будить спящего Бога! (с) Меланхолия Харухи Судзумии
haruhi вне форума Ответить с цитированием
Старый 14.10.2011, 16:17   #6
sover
Пользователь
 
Регистрация: 17.02.2011
Сообщений: 13
По умолчанию

Вообще мне надо взять иконку из .exe и её цвета перенести в текстуру в OpenGl,
для этого мне нужно просто получить набор байтов RGBA...
по моему альфа канал есть, иначе как делаются полупрозрачные иконки(значёк корзины в вин7).
sover вне форума Ответить с цитированием
Старый 14.10.2011, 16:30   #7
haruhi
Форумчанин
 
Аватар для haruhi
 
Регистрация: 05.10.2011
Сообщений: 368
По умолчанию

да, я ошиблась, альфа-канал иконок поддерживается начиная с Windows XP. а как получить альфа канал не знаю.

а что даёт функция GetDIBits при использовании иконки с альфа-каналом?
Не стоит будить спящего Бога! (с) Меланхолия Харухи Судзумии
haruhi вне форума Ответить с цитированием
Старый 14.10.2011, 18:00   #8
sover
Пользователь
 
Регистрация: 17.02.2011
Сообщений: 13
По умолчанию

ну или hdc иконки из ехе файла как-то можно получить или с какого по какой байт она располагается, хоть что-нибудь
sover вне форума Ответить с цитированием
Старый 14.10.2011, 18:45   #9
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

если нужна картинка как массив пикселей с цветами, то нужно делать как сказала haruhi : HICON -> HBITMAP -> GetDIBits
rpy3uH вне форума Ответить с цитированием
Старый 17.10.2011, 11:46   #10
sover
Пользователь
 
Регистрация: 17.02.2011
Сообщений: 13
По умолчанию

всем спасибо за помошь, я нашёл решение простое и вроде бы эффективное(=
весь код:
HICON hIconLarge;
ExtractIconEx("q.ico",0,&hIconLarge ,NULL, 1);
ICONINFO oIconInfo;
if(GetIconInfo(hIconLarge, &oIconInfo)==0)
ShowMessage("0");
byte b[100];
GetBitmapBits(oIconInfo.hbmColor,5* 5,b);//5*5 размер иконки для теста
Возвращает в b BGRA

Последний раз редактировалось sover; 17.10.2011 в 11:49.
sover вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с объектом HBITMAP Anubys Win Api 2 03.05.2011 13:07
Не выводит текст на HBitMap Alex Cones Общие вопросы Delphi 7 26.12.2010 11:41
HBITMAP => DRAW Alex Cones Общие вопросы Delphi 18 08.05.2010 18:52
Hbitmap из png zumm Мультимедиа в Delphi 1 27.03.2010 20:55
Вывод HBITMAP AidarBik Win Api 7 30.07.2008 14:21