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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2012, 18:57   #1
pavellyba
Пользователь
 
Регистрация: 01.12.2010
Сообщений: 84
Восклицание hicon to bitmap

как преобразовать переменную hicon в bitmap?
pavellyba вне форума Ответить с цитированием
Старый 12.11.2012, 20:32   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Берем HDC, создаем HBITMAP с нужными размерами,
SelectObject(hDC, hBitmap)
DrawIcon(hDC, hIcon)

Вопрос только - а зачем?
waleri вне форума Ответить с цитированием
Старый 14.11.2012, 20:01   #3
Nuklon
Форумчанин
 
Аватар для Nuklon
 
Регистрация: 05.04.2012
Сообщений: 134
По умолчанию

Код:
//HICON icon
ICONINFO info = {0};
GetObject(icon, sizeof(ICONINFO), (LPVOID)&info);

info. здесь получишь маску, цвета и размер иконки по x,y
Nuklon вне форума Ответить с цитированием
Старый 14.11.2012, 21:54   #4
Exception
Пользователь
 
Регистрация: 31.12.2007
Сообщений: 37
По умолчанию

Я написал себе такую функцию. Не идеал конечно. Но для моего приложения самое то.

Код:
function CreateBitmapFromIcon(const himi: HICON; dwBitCount: DWORD): HBITMAP;
var
  bRet   : Boolean;
  imgInfo: TIconInfo;
  biSize : TSize;
  hdcIn  : HDC;
  hdcMem : HDC;
  hbmMem : HBITMAP;
  hbmOld : HBITMAP;
  bmi    : TBitmapInfo;
  bmBits : PRGBQuad;
begin

  Result := 0;

  bRet := GetIconInfo(himi, imgInfo);
  if bRet then
  try

    biSize.cx := imgInfo.xHotspot * 2;
    biSize.cy := imgInfo.yHotspot * 2;

    hdcIn := GetDC(0);
    if (hdcIn <> 0) then
    try

     hdcMem := CreateCompatibleDC(hdcIn);
     if (hdcMem <> 0) then
     try

       ZeroMemory(@bmi, SizeOf(TBitmapInfo));

       bmi.bmiHeader.biSize        := SizeOf(bmi.bmiHeader);
       bmi.bmiHeader.biWidth       := biSize.cx;
       bmi.bmiHeader.biHeight      := -biSize.cy;
       bmi.bmiHeader.biPlanes      := 1;
       bmi.bmiHeader.biBitCount    := dwBitCount;
       bmi.bmiHeader.biCompression := BI_RGB;

       hbmMem := CreateDIBSection(hdcIn, bmi, DIB_RGB_COLORS, Pointer(bmBits), 0, 0);
       if (hbmMem <> 0) then
       try

         hbmOld := SelectObject(hdcMem, hbmMem);
         if (hbmOld <> 0) then
         try

           DrawIconEx(hdcMem, 0, 0, himi, biSize.cx, biSize.cy, 0, 0, DI_NORMAL);

           Result := hbmMem;

         finally
           SelectObject(hdcMem, hbmOld);
         end;

       finally
       end;

     finally
       DeleteDC(hdcMem);
     end;

    finally
      ReleaseDC(0, hdcIn);
    end;

  finally
    if (imgInfo.hbmColor <> 0) then
      DeleteObject(imgInfo.hbmColor);
    if (imgInfo.hbmMask <> 0) then
      DeleteObject(imgInfo.hbmMask);
  end;

end;
Exception вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
bitmap Strumok C# (си шарп) 1 13.04.2011 10:52
Bitmap _-Re@l-_ Мультимедиа в Delphi 2 21.07.2010 19:08
конвертация из hicon в ticon D_E_N Помощь студентам 1 01.02.2010 21:05
из-за чего появляется полоса (на скрине) при вставке BitMap в TImage? - Проблема с Bitmap Grey@2009 Мультимедиа в Delphi 2 02.01.2010 20:23
Как сохранить hIcon в TBlobField? k1r1ch БД в Delphi 0 08.08.2009 05:42