Форум: "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