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

Вниз

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

 
БарЛог ©   (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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.041 c
15-1204975614
Михаил
2008-03-08 14:26
2008.04.20
Диалог выбора типа линии


15-1204735704
Zeqfreed
2008-03-05 19:48
2008.04.20
Подскажите, пожалуйста, аудиоплеер на флэше


2-1206081072
Wint
2008-03-21 09:31
2008.04.20
Как считать данные из файла побитно??


15-1204562520
necromancer
2008-03-03 19:42
2008.04.20
Взятие информации о проигрываемой музыки


15-1205103927
Мото
2008-03-10 02:05
2008.04.20
Как проассоциировать файлы такого то типа со своей программой?





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