Главная страница
    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.46 MB
Время: 0.035 c
6-1108259709
Seha_To
2005-02-13 04:55
2005.06.14
Сервер-клиент tapi на Delphi7?


1-1117003474
Ji
2005-05-25 10:44
2005.06.14
Запуск процедуры при загрузке dll


3-1115902646
MakNik
2005-05-12 16:57
2005.06.14
dxDBGrid


1-1117235832
Dark123us
2005-05-28 03:17
2005.06.14
ошибка при попытке выгрузки Dll


3-1115177858
AloneAli
2005-05-04 07:37
2005.06.14
Ошибка при рефреше TADODataSet...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский