Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.11.02;
Скачать: [xml.tar.bz2];

Вниз

Поясните строку в коде...   Найти похожие ветки 

 
Семенов. Н   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.006 c
15-1221052864
Palladin
2008-09-10 17:21
2008.11.02
Драйвера устройства в самом устройстве


2-1222450602
berrometr
2008-09-26 21:36
2008.11.02
Delphi 2009


15-1220959204
vajo
2008-09-09 15:20
2008.11.02
Вот уж не думал, что тема про штрафы ГИБДД никому не интересна.


15-1221023962
Slider007
2008-09-10 09:19
2008.11.02
С днем рождения ! 10 сентября 2008 среда


2-1221122040
RTF to TXT
2008-09-11 12:34
2008.11.02
Перевести большой текст RFT в текст кодировки Win1251





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский