Главная страница
    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.075 c
14-1109943182
mrAld
2005-03-04 16:33
2005.03.27
Регистрация Web-сервиса на IIS .net


14-1110302107
ferr
2005-03-08 20:15
2005.03.27
Музыка


3-1109678790
Denmin
2005-03-01 15:06
2005.03.27
Как создать ХП в БДЕ, на базах парадокса?


14-1109861683
Хинт
2005-03-03 17:54
2005.03.27
Не могу удалить файл. Всё очень странно.


1-1110790309
Sanich
2005-03-14 11:51
2005.03.27
Экспорт изFastReport.





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