Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.04.20;
Скачать: CL | DM;

Вниз

Сохранение части скриншота   Найти похожие ветки 

 
БарЛог ©   (2008-03-27 15:44) [0]

Всем привет. Давно подобным не занимался, но обстоятельства заставили.

Пример снятия скриншота:

...
var
nWidth, nHeight:integer;
objHDC,srcHDC, destHDC:THandle;
bmpDC:HBitmap;
Bitmap:TBitmap;
...
begin
...
nWidth:=Screen.Width;
nHeight:=Screen.Height;
srcHDC:=GetWindowDC(0);
destHDC:=CreateCompatibleDC(srcHDC);
bmpDC:=CreateCompatibleBitmap(srcHDC , nwidth , nheight);
objHDC:=SelectObject(destHDC, bmpDC);
BitBlt(destHDC, 0, 0, nwidth, nheight, srcHDC, 0, 0, SRCCOPY);
SelectObject(destHDC, objHDC);
Bitmap:=TBitmap.Create;
Bitmap.Handle:=bmpDC;
Bitmap.savetofile("C:\screenshot.bmp");
...



Как мне теперь сохранить в файл произвольную прямоугольную область скриншота?

Напомните, пожалуйста.


 
Palladin ©   (2008-03-27 15:49) [1]

обратить внимание на эту строчку
BitBlt(destHDC, 0, 0, nwidth, nheight, srcHDC, 0, 0, SRCCOPY);
и обработать ее напильником...


 
БарЛог ©   (2008-03-27 15:51) [2]

> обратить внимание на эту строчку
Обращал. Не получается :(

Нужно уже ПОСЛЕ вышеприведённого кода сохранить часть скриншота.
Повторять команду BitBlt?


 
Palladin ©   (2008-03-27 15:54) [3]

Да нет, зачем... вообще говоря интересный код... скриншот проще снимается...

Ну а по поводу определенного куска. Битмап у тебя уже есть. У него есть Canvas. Создаешь другой битмап и, при помощи TCanvas.CopyRect, можешь брать любые куски изображения на этот другой битмап из исходного.


 
Johnmen ©   (2008-03-27 15:55) [4]

Кстати, а зачем такие танцы? М.б. сделать лицо попроще? :))
http://www.delphisources.ru/pages/faq/base/click_print_screen.html


 
БарЛог ©   (2008-03-27 15:58) [5]

TCanvas.CopyRect - вот, что я искал. :) запамятовал

> М.б. сделать лицо попроще? :))
Уже делаю :)


 
БарЛог ©   (2008-03-27 16:02) [6]

> http://www.delphisources.ru/pages/faq/base/click_print_screen.html
Кстати, то же самое, только впрофиль :)


 
Johnmen ©   (2008-03-27 16:03) [7]

В профиль-то потоньше будет...


 
БарЛог ©   (2008-03-27 16:07) [8]

Скомпилируется, имхо, одинаково :)


 
Palladin ©   (2008-03-27 16:09) [9]

А теперь зацени фенечку :)

Type
 TDesktopCanvas = class(TCanvas)
 private
   DC : hDC;
   function     GetWidth:Integer;
   function     GetHeight:Integer;
 public
   constructor  Create;
   destructor   Destroy; override;
 published
   property Width: Integer read GetWidth;
   property Height: Integer read GetHeight;
 end;

{ Объект TDesktopCanvas }
function TDesktopCanvas.GetWidth:Integer;
begin
 Result:=GetDeviceCaps(Handle,HORZRES);
end;

function TDesktopCanvas.GetHeight:Integer;
begin
 Result:=GetDeviceCaps(Handle,VERTRES);
end;

constructor TDesktopCanvas.Create;
begin
 inherited Create;
 DC := GetDC(0);
 Handle := DC;
end;

destructor TDesktopCanvas.Destroy;
begin
 Handle := 0;
 ReleaseDC(0, DC);
 inherited Destroy;
end;

...
Var
n:Cardinal;
d:TDesktopCanvas;
b:TBitmap;
begin
d:=TDesktopCanvas.Create;
b:=TBitmap.Create;
b.Width:=d.Width;
b.Height:=d.Height;
b.Canvas.CopyRect(Rect(0,0,d.Width,d.Height),d,Rect(0,0,d.Width,d.Height));
b.SaveToFile("c:\temp.bmp");
b.Free;
d.Free;
end;


из "исходного" можешь куски выдирать, без всяких временных bmp :)


 
БарЛог ©   (2008-03-27 16:27) [10]

Хорошая фенечка :)

Только мне бмп по-любому нужен. Мне его по почте надо автоматом отправлять :)



Страницы: 1 вся ветка

Текущий архив: 2008.04.20;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.03 c
9-1168767810
GamerProg
2007-01-14 12:43
2008.04.20
Проффи программист разработчик игр


15-1205002553
2лекс
2008-03-08 21:55
2008.04.20
MD5Append


2-1206527869
Gavrila
2008-03-26 13:37
2008.04.20
PopupMenu - определить какой Item вызвал событие OnClik


2-1206706569
oleg_teacher
2008-03-28 15:16
2008.04.20
помогите с кодировкой


2-1206722314
Che
2008-03-28 19:38
2008.04.20
Заблокировка клавиатуры и рестарт компьютера.