Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

Получение изображения экрана

Delphi , ОС и Железо , Монитор и Экран

Получение изображения экрана

Способ 1

Code:

// В качестве параметров передаются:
// AHandle - хэндл окна, скриншот которого мы хочем получить
// CompressPercent - процент сжатия картинки
// AImage - картинка, в которую будет помещено изображение
// в случае успешного скриншота функция вернет True
{©Drkb v.3(2007): www.drkb.ru}
 
function GetScreenShot(const AHandle: THandle; const CompressPercent: Byte;
var AImage: TJPEGImage): Boolean;
var
fBitmap: TBitmap;
DC: HDC;
Rect: TRect;
begin
Result := False;
if AImage = nil then Exit;
DC := GetDC(AHandle);
if DC <> 0 then
try
   fBitmap := TBitmap.Create;
   try
     if not GetClientRect(AHandle, Rect) then Exit;
     fBitmap.Width := Rect.Right - Rect.Left;
     fBitmap.Height := Rect.Bottom - Rect.Top;
     fBitmap.PixelFormat := pf32bit;
     Result := BitBlt(fBitmap.Canvas.Handle, 0, 0, fBitmap.Width,
       fBitmap.Height, DC, 0, 0, SRCCOPY);
     if not Result then Exit;
     AImage.Assign(fBitmap);
     AImage.CompressionQuality := CompressPercent;
   finally
     fBitmap.Free;
   end;
finally
   ReleaseDC(AHandle, DC);
end;
end;
 
// Пример использования...
procedure TForm1.Button1Click(Sender: TObject);
var
Image: TJPEGImage;
begin
// Скриншот рабочего стола
Image := TJPEGImage.Create;
try
   if GetScreenShot(GetDesktopWindow, 150, Image) then
     Image1.Picture.Assign(Image);
finally
   Image.Free;
end;
// Скриншот нашей формы
Image := TJPEGImage.Create;
try
   if GetScreenShot(Handle, 150, Image) then
     Image2.Picture.Assign(Image);
finally
   Image.Free;
end;
end;

Автор Rouse_

Взято из http://forum.sources.ru

 Способ 2

Code:

keybd_event(VK_SNAPSHOT,1,KEYEVENTF_KEYUP,0);
OpenClipBoard(Form1.handle);
try
SetClipBoardData(CF_DIB,Form1.handle);
vv:=GetClipBoardData(CF_BITMAP);
Image1.Picture.LoadFromClipboardFormat(CF_BITMAP,vv,0);
finally
CloseClipBoard;
EmptyClipBoard;
end;

Автор: Song

Взято из http://forum.sources.ru

Способ 3

Еще один способ получения скриншота окна, на чистом WinApi:

Code:

function CreateWindwowBitmap(Wnd: HWND): HBITMAP;

 
var
R: TRect;
W, H: Integer;
DC, memDC: HDC;
bm, oldBM: HBITMAP;
begin
GetWindowRect(Wnd, R);
W := R.Right - R.Left;
H := R.Bottom - R.Top;
DC := GetWindowDC(Wnd);
memDC := CreateCompatibleDC(DC);
bm := CreateCompatibleBitmap(DC, W, H);
oldBM := SelectObject(memDC, bm);
BitBlt(memDC, 0,0, w, h, DC, 0,0, SRCCOPY);
SelectObject(memDC, oldBM);
DeleteDC(memDC);
DeleteObject(oldBM);
ReleaseDC(Wnd, DC);
Result := bm;
end;

Автор: Krid

Взято из http://forum.sources.ru

Статья Получение изображения экрана раздела ОС и Железо Монитор и Экран может быть полезна для разработчиков на Delphi и FreePascal.


Комментарии и вопросы


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Монитор и Экран ::


реклама



©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru Rambler's Top100
29.03.2024 10:38:07/0.032609939575195/0