Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.06.14;
Скачать: CL | DM;

Вниз

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 вся ветка

Текущий архив: 2005.06.14;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.06 c
3-1115826972
IrviS
2005-05-11 19:56
2005.06.14
Как добавить поле в рунтайме


1-1117524140
Mars
2005-05-31 11:22
2005.06.14
Как закрыть все окна приложения?


1-1117180990
pavel_guzhanov
2005-05-27 12:03
2005.06.14
создание и уничтожение компонентов в Run-Time


1-1116719790
scrazy
2005-05-22 03:56
2005.06.14
7 и 8 Преобразования грамматик.


14-1116400477
Иксик
2005-05-18 11:14
2005.06.14
Интервью с DiamondShark