Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];

Вниз

HBitmap на форму   Найти похожие ветки 

 
Alfa   (2005-04-15 13:55) [0]

Сдравствуйте мастера. У меня тут маленькая проблемка.
Я получил HBitmap методом CreateDIBitmap(), и мне как-то надо вывести его на форму.
Подозреваю, что это надо делать с помощью BitBlt(), но как я не пробовал у меня максимум, что получалось, это вывести чёрный квадрат на экран(хотя картинка была цветная).
Помогите пожалуста.


 
DVM ©   (2005-04-15 13:58) [1]

void DrawBitmap(
   HDC     dc,        // контекст-приемник
   HBITMAP bmp,       // картинка-исходник
   int     x_src,     // верхний левый угол исходника
   int     y_src,     //
   int     x_dst,     // верхний левый угол приемника
   int     y_dst,     //
   int     dx,        // размеры
   int     dy )       //
{
   // создаем в памяти контекст устройства,
   // совместимый с контекстом-приемником
   HDC hdcMem = CreateCompatibleDC( dc );

   // связываем исходный bitmap с временным контекстом
   SelectObject( hdcMem, bmp );

   // копируем с одного контекста в другой
   // по заданным параметрам
   BitBlt(
       dc,
       x_dst,
       y_dst,
       dx,
       dy,
       hdcMem,
       x_src,
       y_src,
       SRCCOPY
   );

   // удаляем вспомогательный контекст
   DeleteDC( hdcMem );
}


 
Alfa   (2005-04-15 14:02) [2]

Спасибо большое DVM.:)


 
Alfa   (2005-04-20 13:27) [3]

У меня что-то не выходит:(
Вроде всё делаю как надо:

Window:HwnD;
Bitmap:HBitmap;
hFile:HDC;            //dc файла
BFH:BITMAPFILEHEADER;
BIH:BITMAPINFOHEADER;
BI:BITMAPINFO;
ReadCount:DWORD;
SiZeInfo:LongInt;
p:Pointer;
HDBitmap:HDC;//DC совместимый с окном.
HDForm:HDC;//dc окна.

В коде:
     HDForm:=GetDc(window);

     hFile := CreateFile( FileName, GENERIC_READ, FILE_SHARE_READ, nil,
                    OPEN_EXISTING, 0, 0 );
     ReadFile(hFile,BFH,SizeOf(BITMAPFILEHEADER),ReadCount,nil);
     ReadFile(hFile,BIH,SizeOf(BITMAPINFOHEADER),ReadCount,nil);
     BI.bmiHeader:=BIH;
     p:=pbyte(GlobalAllocPtr( GMEM_MOVEABLE, SizeInfo ));
     ReadFile(HFile,p,BIH.biSizeImage,ReadCount,nil);
     Bitmap:=CreateDIBitmap(HDForm,BIH,CBM_INIT, p,BI,DIB_RGB_COLORS);
     CloseHandle(HFile);//Прочитали файл.
                        //Отрисовка
          HDBitmap:=CreateCompatibleDC(HDForm);
          SelectObject(HDBitmap,Bitmap);
          BitBlt(HDForm,100,100,50,50,HDBitmap,0,0,SRCCopy);
Он выдаёт мне Чёрный квадрат.
Может это ошибка в чтении файла.


 
DVM ©   (2005-04-21 10:27) [4]

hBitmap:=LoadImage(hInstance, PChar(Path_to_bitmap), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE or LR_DEFAULTSIZE);

//-----------

procedure DrawBitmap(dc: HDC; hBitmap: HBITMAP; xStart, yStart: integer);
var
 bm: BITMAP;
 hdcMem: HDC;
 ptSize, ptOrg: TPoint;
begin
 if dc <> 0 then
   begin
     hdcMem := CreateCompatibleDC(dc);
     if (hdcMem <> 0) and (hBitmap <> 0) then
       begin
         SelectObject(hdcMem, hBitmap);
         SetMapMode(hdcMem, GetMapMode(dc));
         GetObject(hBitmap, sizeof(BITMAP), @bm);
         ptSize.x := bm.bmWidth;
         ptSize.y := bm.bmHeight;
         DPtoLP(dc, ptSize, 1);
         ptOrg.x := 0;
         ptOrg.y := 0;
         DPtoLP(hdcMem, ptOrg, 1);
         BitBlt(dc, xStart, yStart, ptSize.x, ptSize.y, hdcMem, ptOrg.x, ptOrg.y, SRCCOPY);
         DeleteDC(hdcMem);
       end;
   end;
end;



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.038 c
14-1117095750
Игорь Шевченко
2005-05-26 12:22
2005.06.14
Восстановление ветки "Двойные стандарты"


1-1117451915
Mouserx
2005-05-30 15:18
2005.06.14
Использование inherited


14-1117005456
Igorek
2005-05-25 11:17
2005.06.14
Как установить на клавиатуру индикатор раскладки?


8-1109190242
Shamansky
2005-02-23 23:24
2005.06.14
Масштабирование видеокартинки


4-1114517267
zero-g
2005-04-26 16:07
2005.06.14
Глобальный перехват нажатия комбинации клавиш





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский