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

Вниз

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

 
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 вся ветка

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

Наверх




Память: 0.48 MB
Время: 0.025 c
14-1109944753
1008
2005-03-04 16:59
2005.03.27
Интересный глюк


3-1109149082
}|{yk
2005-02-23 11:58
2005.03.27
Не считаются футеры в FastReport


4-1108178714
nickmas
2005-02-12 06:25
2005.03.27
Как убрать программу из трея?


14-1109949577
аноним_
2005-03-04 18:19
2005.03.27
Вопрос по javascript


1-1110788781
denis24
2005-03-14 11:26
2005.03.27
Работа со списком указателей