Главная страница
    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-1221146089
@!!ex
2008-09-11 19:14
2008.11.02
Как заменить кадры видео с помощью VirtualDub?


2-1222095305
Аврам
2008-09-22 18:55
2008.11.02
запрос mysql, узнать что нету записи


15-1221207727
berrometr
2008-09-12 12:22
2008.11.02
Защита программ от исследования


10-1150277849
oto
2006-06-14 13:37
2008.11.02
архивизация файлов


2-1222067106
Ivanov Ivan
2008-09-22 11:05
2008.11.02
Сравнить элементы





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