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

Вниз

Не могу снять скриншот   Найти похожие ветки 

 
dr Tr0jan   (2004-12-07 13:18) [0]

var
 Canvas: TCanvas;
 Bitmap: TBitmap;
 ScreenDC: hdc;
begin
 ScreenDC:=getDc(0);
 Canvas:=TCanvas.Create;
 Bitmap:=TBitmap.Create;

 Canvas.Handle:=ScreenDC;

//  Bitmap.Canvas.Handle:=Canvas.Handle;
//  или
//  Bitmap.Assign(Canvas);

 Bitmap.SaveToFile("c:\images\123.bmp");

 ReleaseDC(0, ScreenDC);
 Canvas.Free;
 Bitmap.Free;
end;

Каким образом можно сохранить канву в файл?


 
Jeer ©   (2004-12-07 13:31) [1]

Через Bounds() получить Rect:TRect

Bitmap.Canvas.CopyRect(Rect, DeskTopCanvas, Rect);


 
dr Tr0jan   (2004-12-07 15:07) [2]

К примеру:
Bitmap.Canvas.CopyRect(Rect(0,0,100,100), Canvas, Rect(0,0,100,100));
Bitmap.Canvas.CopyRect(Bounds(0,0,100,100), Canvas, Bounds(0,0,100,100));

Ничего не дают.


 
Jeer ©   (2004-12-07 15:40) [3]

1. DeskTopCanvas := TCanvas.Create;
  DeskTopCanvas.Handle := GetDC(HWnd_DeskTop);
//   getDc(0) - плохой тон

2. Rect := Bounds(..)

3. Bitmap.Width :=..
  Bitmap.Height :=..

4. Bitmap.Canvas.CopyRect(..);

4. Думать-то надо.


 
dr Tr0jan   (2004-12-08 09:12) [4]

1) Необязательно
2) Само-собой, до (поверхностной) оптимизации еще не дошел.
3) Еще же хотел написать, да забыл. Спасибо.
4.1) Виноват. Кто же знал? Думать действительно надо.


 
Jeer ©   (2004-12-08 10:21) [5]

ScreenDC:=getDc(0);
Bitmap.Canvas.CopyRect(Rect(0,0,100,100), Canvas, Rect(0,0,100,100));

А это не к вопросу об оптимизации - это стиль.
Его надо сразу вырабатывать.
Тогда лишнее или ошибочное легче будет увидеть.


 
Rouse_ ©   (2004-12-08 10:28) [6]

// В качестве параметров передаются:
// AHandle - хэндл окна, скриншот которого мы хочем получить
// CompressPercent - процент сжатия картинки
// AImage - картинка, в которую будет помещено изображение
// в случае успешного скриншота функция вернет True
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;


 
dr Tr0jan   (2004-12-08 11:18) [7]

Стиль само собой! Но когда отрабатываю какой либо алгоритм, я о стиле не забочусь (незачем делать двойной отступ, незачем соблюдать регистр и "пробелы"). А когда я уже занимаюсь кодом серъезно - тогда и оптимизация кода, и стиль. Но я думаю, это уже к данной теме не относится.
Rouse_, хоть я пример и не просил, спасибо. Кому-нить другому будет полезно прочитать, а в общем смысле я разобрался.



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

Форум: "Media";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.036 c
3-1109685243
grav
2005-03-01 16:54
2005.03.27
Сортировка записей типа список в Word


14-1109872360
Verg
2005-03-03 20:52
2005.03.27
Адреса protected полей класса


1-1110759398
antoxa
2005-03-14 03:16
2005.03.27
Подскажите на "чем из Delphi" писать для интернет (сервер Linux)


3-1109320350
Steepe Wolf
2005-02-25 11:32
2005.03.27
MS SQL BDE или ADO ???


14-1110366242
Doxygen
2005-03-09 14:04
2005.03.27
Н.Караченцов





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