Главная страница
    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.039 c
6-1106741376
Vadim X
2005-01-26 15:09
2005.03.27
THTTP SendForm


3-1109064228
Aleksandr.
2005-02-22 12:23
2005.03.27
Не могу отладить создание таблицы в yaffil!


1-1110820262
hamster
2005-03-14 20:11
2005.03.27
Registry


1-1110983113
hgd
2005-03-16 17:25
2005.03.27
Карты IMG открыть


1-1110725366
mr-kack
2005-03-13 17:49
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский