Главная страница
    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-1220722887
AlexDan
2008-09-06 21:41
2008.11.02
Экранная клавиатура..


15-1221129150
Elchin
2008-09-11 14:32
2008.11.02
Unicode


2-1222065054
Sten
2008-09-22 10:30
2008.11.02
Поиск


1-1202143624
Сергей
2008-02-04 19:47
2008.11.02
Duplicate resource


15-1220615795
Пробежал...
2008-09-05 15:56
2008.11.02
D2007 умеет делать приложения для win9x?





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