Форум: "WinAPI";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];
ВнизДинамическое создание картинки в памяти Найти похожие ветки
← →
chi (2003-11-25 13:47) [0]и сохранение его в файл.. или не пойму как все это работает :((
Уважаемые мастера, если можно пример. Спасибо.
← →
MBo (2003-11-25 14:04) [1]Расшифруй вопрос - что имеешь в виду под картинкой
← →
Maxud (2003-11-25 14:07) [2]Что-то типа этого, наверное:
uses Graphics;
...
var b:tbitmap;
begin
b := TBitmap.Create;
try
b.Width := 35;
b.Height:=35;
b.Canvas.Bruch.Color := clRed;
b.Canvas.FillRect(Rect(5,5,30,30));
b.SaveToFile("sdfsdf.bmp");
finally
b.Free;
end;
end;
← →
chi (2003-11-25 14:34) [3]
> MBo © (25.11.03 14:04) [1]
> Расшифруй вопрос - что имеешь в виду под картинкой
под картинкой имею в виду битмап, вобщем, надо скопировать часть экрана в память и сохранить его в файл(желательно все без VCL). И я совсем запутался с HDC, HBitmap, указателями и прочими..
Вот мой код с TIMAGE:
hdcScreen := GetDC(0);
hdcCompatible := CreateCompatibleDC(hdcScreen);
//
//Create a compatible bitmap for hdcScreen.
//
hbmScreen:= CreateCompatibleBitmap(hdcScreen,
GetDeviceCaps(hdcScreen, HORZRES),
GetDeviceCaps(hdcScreen, VERTRES));
// Select the bitmaps into the compatible DC. */
if SelectObject(hdcCompatible, hbmScreen)<>0 then
showmessage("Compatible Bitmap Selection");
//
// Copy color data for the entire display into a
//bitmap that is selected into a compatible DC.
if not BitBlt(hdcCompatible,
0,0,
200, 300,
hdcScreen,
0,0,
SRCCOPY) then
showmessage("Screen to Compat Blt Failed");
ShowWindow(handle, SW_SHOW);
image1.Canvas.Handle:=hdcCompatible;
и вот где там именно указатель на битмап и что здесь HDC как его передавать в GetDibits, каким образом заполняется структура BitmapInfo , зачем вводится PBitmapInfo понять не могу совсем, или я напрочь запутался
← →
chi (2003-11-27 02:07) [4]неужели ни кто не знает или игнор ??
← →
Mihey (2003-11-27 16:45) [5]2 Chi:
> под картинкой имею в виду битмап, вобщем, надо скопировать часть экрана в память и сохранить его в файл(желательно все без VCL). И я совсем запутался с HDC, HBitmap, указателями и прочими..
Заводим переменную TBitmap:
var Bmp: TBitmap;
Создадим объект, зададим размеры:
Bmp := TBitmap.Create;
Bmp.Width := 300;
Bmp.Height := 200;
Всё, картинка у тебя создана. Сейчас нарисуем в неё экран. Это делается при помощи BitBlt, как ты и знаешь:
var ScreenDC: HDC;
...
ScreenDC := GetDC(0);
try
BitBlt(Bmp.Canvas.Handle, 0, 0, Bmp.Width,
Bmp.Height, ScreenDC, 0, 0, SRCCOPY );
finally
ReleaseDC(0, ScreenDC);
end;
...
Всё, теперь сохраним файл на диск:
Bmp.SaveToFile("screenshot.bmp");
И удалим объект:
Bmp.Free;
Это решение требует только модуля Graphics, т.е. не использует VCL.
← →
chi (2003-11-28 20:25) [6]большое спасибо!
← →
hooker (2003-11-29 20:24) [7]если можно, то скинте ссылочку, где можно было бы почитать о подобных проблемах(желательно русскую)
← →
марсианин (2003-11-30 03:22) [8]как вариант изучай исходники
← →
chi (2003-11-30 15:28) [9]
> марсианин (30.11.03 03:22) [8]
запутался в этих исходниках , блин. Не понимаю проблему в корне, т.е. hdc, hBitmap, getdibits и т.д.
← →
MADE_IN_USSR (2003-12-01 12:14) [10]Удалено модератором
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.045 c