Текущий архив: 2008.11.02;
Скачать: CL | DM;
Вниз
Поясните строку в коде... Найти похожие ветки
← →
Семенов. Н (2008-09-25 15:54) [0]Здравствуйте! Нашел на каком-то форуме код, делающий скриншот экрана средствами WinApi.
Код рабочий, все предельно ясно, кроме 1 строки в коде (см. коментарий).
program ScreenShot;
uses
Windows;
procedure ApiScrCapture(const FileName: String);
type
TScr = array [0..1] of Byte;
PScr = ^TScr;
var
hBmp: hBitmap;
DeskDC: hDC;
DC: hDC;
BFH: BITMAPFILEHEADER;
BIH: tagBITMAPINFO;
ScrX, ScrY: Integer;
F: File;
ScrSize: Cardinal;
Bits: PScr;
begin
SCRX:= GetSystemMetrics(SM_CXSCREEN);
SCRY:= GetSystemMetrics(SM_CYSCREEN);
ScrSize:= ScrX * ScrY * 3; // ----------- Для чего умножение на 3???
GetMem(Bits, ScrSize);
DeskDC:= GetDC(0);
hBmp:= CreateCompatibleBitmap(DeskDC, ScrX, ScrY);
DC:= CreateCompatibleDC(DeskDC);
SelectObject(DC, hbmp);
BitBlt(DC, 0, 0, SCRX, SCRY, DeskDC, 0, 0, SRCCOPY);
with BFH do
begin
BI_RGB
bfType:= $4D42;
bfSize:= SCRX * SCRY * 3 + SizeOf(BFH) + SizeOf(BIH);
bfReserved1 := 0;
bfReserved2 := 0;
bfOffBits:= SizeOf(BFH) + SizeOf(BIH);
end;
with BIH.bmiHeader do
begin
biSize:= sizeof(BIH);
biWidth:= SCRX;
biHeight:= SCRY;
biPlanes:= 1;
biBitCount:= 24;
biCompression:= BI_RGB;
biSizeImage:= ScrSize;
biClrImportant:= 0;
end;
GetDiBits(DC, hbmp, 0, SCRY, Bits, BIH, DIB_RGB_COLORS);
DeleteObject(hbmp);
AssignFile(F, FileName);
Rewrite(F, 1);
Blockwrite(F, BFH, SizeOf(BFH));
Blockwrite(F, BIH, SizeOf(BIH));
Blockwrite(F, bits^, ScrSize);
CloseFile(F);
FreeMem(Bits);
end;
begin
ApiScrCapture("ScreenShot.bmp");
end.
Насчет "нет проверок e.t.c" - код не мой, я бы такого не допустил :)
← →
Vlad Oshin © (2008-09-25 15:56) [1]RGB
← →
Palladin © (2008-09-25 15:58) [2]цвет 24бита - 3 байта, размер получается x*y*3
← →
Vlad Oshin © (2008-09-25 16:01) [3]точно..
← →
Семенов. Н (2008-09-25 16:22) [4]Спасибо!
Страницы: 1 вся ветка
Текущий архив: 2008.11.02;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.006 c