|
Вопрос # 1 133/ вопрос открыт / |
|
Здравствуйте!
Как сделать скриншот экрана и сохранить его в jpg c с нужными параметрами качества jpg?
 |
Вопрос задал: Ilia Ermakov (статус: 1-ый класс)
Вопрос отправлен: 23 ноября 2007, 17:05
Состояние вопроса: открыт, ответов: 2.
|
Ответ #1. Отвечает эксперт: Вадим К
Здравствуйте, Ilia Ermakov!
Всё просто - смотрим в приложении.
И не забываем о Uses JPEG.
Приложение: Переключить в обычный режим- procedure TForm1.Button1Click(Sender: TObject);
- var
- JpegIm: TJpegImage;
- bm: TBitMap;
- begin
- bm := TBitMap.Create;
- bm.Width := Screen.Width;
- bm.Height := Screen.Height;
- BitBlt(bm.Canvas.Handle, 0, 0, bm.Width, bm.Height, GetDC(0), 0, 0, SRCCOPY);
- JpegIm := TJpegImage.Create;
- JpegIm.Assign(bm);
-
- JpegIm.Compress;
-
- bm.Destroy;
- JpegIm.Destroy;
- end;
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 23 ноября 2007, 17:21
|
Ответ #2. Отвечает эксперт: Feniks
Здравствуйте, Ilia Ermakov!
Дополнение к Вадим К.
uses JPEG;
{©Drkb v.3(2007): www.drkb.ru,
®Vit (Vitaly Nevzorov) - nevzorov@yahoo.com}
...
var
i: TJPEGImage;
Dwh : HWND;
DRect: TRect;
DescDC : HDC;
Canv : TCanvas;
begin
try
i := TJPEGImage.create;
try
i.CompressionQuality := 100;
image.Width := screen.width;
image.height := screen.height;
DWH := GetDesktopWindow;
GetWindowRect(DWH, DRect);
DescDC := GetDeviceContext(DWH);
Canv.Handle := DescDC;
DRect.Left := 0;
DRect.Top := 0;
DRect.Right := screen.Width;
DRect.Bottom := screen.Height;
Image.Canvas.CopyRect(DRect, Canv, DRect);
i.assign(Image.Picture.Bitmap);
I.SaveToFile('M:\MyFile.jpg');
finally
i.free;
end;
except
end;
Более сложный метод см. в Приложении.
Приложение: Переключить в обычный режим- unit ScrnCap;
- interface
- uses WinTypes, WinProcs, Forms, Classes, Graphics, Controls;
-
-
- function CaptureScreenRect(ARect : TRect) : TBitmap;
-
- function CaptureScreen : TBitmap;
-
- function CaptureClientImage(Control : TControl) : TBitmap;
-
- function CaptureControlImage(Control : TControl) : TBitmap;
-
- {===============================================================}
- implementation
- function GetSystemPalette : HPalette;
- var
- PaletteSize : integer;
- LogSize : integer;
- LogPalette : PLogPalette;
- DC : HDC;
- Focus : HWND;
- begin
- result:=0;
- Focus:=GetFocus;
- DC:=GetDC(Focus);
- try
- PaletteSize:=GetDeviceCaps(DC, SIZEPALETTE);
- LogSize:=SizeOf(TLogPalette)+(PaletteSize-1)*SizeOf(TPaletteEntry);
- GetMem(LogPalette, LogSize);
- try
- with LogPalette^ do
- begin
- palVersion:=$0300;
- palNumEntries:=PaletteSize;
- GetSystemPaletteEntries(DC, 0, PaletteSize, palPalEntry);
- end;
- result:=CreatePalette(LogPalette^);
- finally
- FreeMem(LogPalette, LogSize);
- end;
- finally
- ReleaseDC(Focus, DC);
- end;
- end;
-
-
- function CaptureScreenRect(ARect : TRect) : TBitmap;
- var
- ScreenDC : HDC;
- begin
- Result:=TBitmap.Create;
- with result, ARect do begin
- Width:=Right-Left;
- Height:=Bottom-Top;
- ScreenDC:=GetDC(0);
- try
- BitBlt(Canvas.Handle, 0,0,Width,Height,ScreenDC, Left, Top, SRCCOPY );
- finally
- ReleaseDC(0, ScreenDC);
- end;
- Palette:=GetSystemPalette;
- end;
- end;
-
- function CaptureScreen : TBitmap;
- begin
- with Screen do
- Result:=CaptureScreenRect(Rect(0,0,Width,Height));
- end;
-
- function CaptureClientImage(Control : TControl) : TBitmap;
- begin
- with Control, Control.ClientOrigin do
- result:=CaptureScreenRect(Bounds(X,Y,ClientWidth,ClientHeight));
- end;
-
- function CaptureControlImage(Control : TControl) : TBitmap;
- begin
- with Control do
- if Parent=Nil then
- result:=CaptureScreenRect(Bounds(Left,Top,Width,Height))
- else
- with Parent.ClientToScreen(Point(Left, Top)) do
- result:=CaptureScreenRect(Bounds(X,Y,Width,Height));
- end;
- end.
 |
Ответ отправил: Feniks (статус: Бакалавр)
Время отправки: 23 ноября 2007, 17:57
|
Мини-форум вопроса
Мини-форум пуст.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|