Главная страница
    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.45 MB
Время: 0.006 c
15-1218713094
@!!ex
2008-08-14 15:24
2008.11.02
Хочу купить монитор


2-1222372060
DFT
2008-09-25 23:47
2008.11.02
RandomRange


2-1222247658
Jiura
2008-09-24 13:14
2008.11.02
Как в Delphi скомпилировать Native DLL?


2-1222246913
pathfinder
2008-09-24 13:01
2008.11.02
Массив объектов как параметр


15-1221024724
Vlad Oshin
2008-09-10 09:32
2008.11.02
BDS2006, палитра компонент, как упорядочить внутри вкладки по афл





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский