![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сохранение данных в файл [D6, WinXP]
Shluz © (2003-11-18 12:48:00)
Есть следующий код (трансировал с СИ MSDK) здесь создается снимок участка экрана и отображается на канву формы..а вопрос, вообщем-то как проецировать эти данные не на канву , а файл(средствами API) ??
procedure TForm1.Button1Click(Sender: TObject);
var
hdcScreen,hdcCompatible: HDC;
hbmScreen:Hbitmap;
begin
hdcScreen := GetDC(0);
hdcCompatible := CreateCompatibleDC(hdcScreen);
hbmScreen := CreateCompatibleBitmap(hdcScreen,
GetDeviceCaps(hdcScreen, HORZRES),
GetDeviceCaps(hdcScreen, VERTRES));
if SelectObject(hdcCompatible, hbmScreen)<>0 then
showmessage("Compatible Bitmap Selection");
//howWindow(handle, SW_HIDE);
if not BitBlt(canvas.Handle,
10,10,
100, 200,
hdcScreen,
0,0,
SRCCOPY)
then
showmessage("Screen to Compat Blt Failed");
end;
Shluz (2003-11-18 13:55:00) [1]
ОГРОМНОЕ спасибо! Технологию понял :)
Digitman (2003-11-18 13:33:00) [2]
var
fs: TStream;
buf: Pointer; // здесь у тебя - указатель на буфер, в который ты перед этим скопировал битмап
bufsize: Integer; // здесь - размер скопированных в буфер данных
...
fs := TFileStream.Create("myfile", fmCreate);
try
fs.WriteBuffer(buf^, bufsize);
finally
fs.Free;
end;
Shluz (2003-11-18 13:24:00) [3]
>Digitman
дело в том, что слабо еще разбираюсь в работе с файлами на таком уровне, если можно приведите пример
Digitman (2003-11-18 12:57:00) [4]
вместо бит-блиттинга используй ф-цию GetDIBits, котора скопирует в указанный буфер содержимое битмапа для последующей записи полученного содержимого буфера куда угодно, в т.ч. и в файл