Главная страница
    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.036 c
1-1117184647
Layner
2005-05-27 13:04
2005.06.14
Приветствую всех! Простой вопрос по написанию компанента


4-1114281844
Host
2005-04-23 22:44
2005.06.14
Как проверить возможность записи в файл


1-1117279844
Ivan%
2005-05-28 15:30
2005.06.14
TOleContainer и любопытный пользователь


8-1109168540
Fenik
2005-02-23 17:22
2005.06.14
Аппроксимация экспериментальных данных.


1-1117292661
twin
2005-05-28 19:04
2005.06.14
Excel и графики





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