На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual C++ / MFC / WTL (далее Раздела)
1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.

Полезные ссылки:
user posted image FAQ Раздела user posted image Обновления для FAQ Раздела user posted image Поиск по Разделу user posted image MSDN Library Online
Модераторы: ElcnU
  
> Разделить HBITMAP на куски
    Есть HBITMAP скажем размером 128х128, нужно разделить его на 4 куска резмера 32х32. На выходе тоже HBITMAPы
      BitBlt'ом можно копировать кусок DC? Или проблема в чем-то другом? :)
        код плиз, что-то не вышло (

        Добавлено
        на выходе повторяю 4 HBITMAP
          покажи код.
            на вскидку
            код не испытывал
            ExpandedWrap disabled
              void SplitBmp(HBITMAP hBitmap,HBITMAP& hBitmapRet1,HBITMAP& hBitmapRet2,HBITMAP& hBitmapRet3,HBITMAP& hBitmapRet4)
              {
                  //получаем размер битмапа
                  BITMAP bmp;
                  if(::GetObject(hBitmap,sizeof(BITMAP),&bmp)==0)
                      return NULL;
               
                  HDC hDTDC=::GetDC(NULL);
                  HDC hSrcDC=::CreateCompatibleDC(hDTDC);
                  hBitmap=(HBITMAP)::SelectObject(hSrcDC,hBitmap);
                  HDC hDestDC=::CreateCompatibleDC(hDTDC);
               
                  hBitmapRet1=::CreateCompatibleBitmap(hDTDC,bmp.bmWidth/2,bmp.bmHeight/2);
                  hBitmapRet1=(HBITMAP)::SelectObject(hDestDC,hBitmapRet1);
                  ::BitBlt(hDestDC,0,0,bmp.bmWidth/2,bmp.bmHeight/2,hSrcDC,0,0,SRCCOPY);
                  hBitmapRet1=(HBITMAP)::SelectObject(hDestDC,hBitmapRet1);
               
                  hBitmapRet2=::CreateCompatibleBitmap(hDTDC,bmp.bmWidth/2,bmp.bmHeight/2);
                  hBitmapRet2=(HBITMAP)::SelectObject(hDestDC,hBitmapRet2);
                  ::BitBlt(hDestDC,0,0,bmp.bmWidth/2,bmp.bmHeight/2,hSrcDC,bmp.bmWidth/2,0,SRCCOPY);
                  hBitmapRet2=(HBITMAP)::SelectObject(hDestDC,hBitmapRet2);
               
                  hBitmapRet3=::CreateCompatibleBitmap(hDTDC,bmp.bmWidth/2,bmp.bmHeight/2);
                  hBitmapRet3=(HBITMAP)::SelectObject(hDestDC,hBitmapRet3);
                  ::BitBlt(hDestDC,0,0,bmp.bmWidth/2,bmp.bmHeight/2,hSrcDC,0,bmp.bmHeight/2,SRCCOPY);
                  hBitmapRet3=(HBITMAP)::SelectObject(hDestDC,hBitmapRet3);
               
                  hBitmapRet4=::CreateCompatibleBitmap(hDTDC,bmp.bmWidth/2,bmp.bmHeight/2);
                  hBitmapRet4=(HBITMAP)::SelectObject(hDestDC,hBitmapRet4);
                  ::BitBlt(hDestDC,0,0,bmp.bmWidth/2,bmp.bmHeight/2,hSrcDC,bmp.bmWidth/2,bmp.bmHeight/2,SRCCOPY);
                  hBitmapRet4=(HBITMAP)::SelectObject(hDestDC,hBitmapRet4);
               
                  ::SelectObject(hSrcDC,hBitmap);
                  //освобождаем ресурсы
                  ::DeleteDC(hSrcDC);
                  ::DeleteDC(hDestDC);    
                  ::ReleaseDC(NULL,hDTDC);
              }
            Сообщение отредактировано: ElcnU -
              я тоже пока не испытывал. Тут есть обстоятельство - битмат - 32 битный с альфа каналом. Загружается вот так.
              ExpandedWrap disabled
                (HBITMAP)LoadImage( hInstance, MAKEINTRESOURCE( ResourceID ), IMAGE_BITMAP, iWidth, iHeight, LR_CREATEDIBSECTION


              щас проверю
              Сообщение отредактировано: Мальчиш -
                Цитата Мальчиш @
                я тоже пока не испытывал. Тут есть обстоятельство - битмат - 32 битный с альфа каналом. Загружается вот так.
                GDI вообщето игнорирует альфа канал, и его целостность не гарантируется. Используй GDI+
                  Повстанець
                  нормально он отображается, используется своя функция для рендеринга - на ассемблере.

                  Добавлено
                  ElcnU, большое спасибо.
                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script execution time: 0,0326 ]   [ 16 queries used ]   [ Generated: 25.04.24, 12:06 GMT ]