Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.47 MB
Время: 0.015 c
2-1222372060
DFT
2008-09-25 23:47
2008.11.02
RandomRange


15-1220896812
Point
2008-09-08 22:00
2008.11.02
Компоненты Indy можно ли использовать в консольных приложених?


15-1220608809
quake
2008-09-05 14:00
2008.11.02
Тип файла


2-1222061843
Виктор
2008-09-22 09:37
2008.11.02
Чтение файла .txt и формирование Excel


2-1222072462
Neon-w
2008-09-22 12:34
2008.11.02
Картинку .jpg на кнопку