Форум: "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.033 c