Главная страница
    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.037 c
1-1110837724
phobos
2005-03-15 01:02
2005.03.27
Работа с ListBox


1-1110814646
Дельфин
2005-03-14 18:37
2005.03.27
Нахождение алгоритма распределения числа


1-1110387927
Игнатенков Станислав
2005-03-09 20:05
2005.03.27
Типизированные файлы


1-1110525335
seregka
2005-03-11 10:15
2005.03.27
Добавление информации в exe


1-1110644167
Слава
2005-03-12 19:16
2005.03.27
ListView - как установить фокус на элемент ?





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