Текущий архив: 2006.05.28;
Скачать: CL | DM;
ВнизКак сделать копию экрана когда играет видео? Найти похожие ветки
← →
Volf_555 © (2006-03-04 18:55) [0]Нужна функция, которая будет копировать экран во время проигрывания видео в файл.
ПроцедураScrnCap.ConvertBMP2JPEG
отлично копирует принтскрин экрана в файл при условии если не запущено видео. Если запустить видео, то вместо картинки (кадра) будет сплошная заливка цветом (тёмно синим к примеру)
Вот содержимое юнита, в котором есть функции копирования экрана в файл:
unit ScrnCap;
interface
uses WinTypes, WinProcs, Forms, Classes, Graphics, Controls, Jpeg, ClipBrd;
{ Копиpует пpямоугольную область экpана }
function CaptureScreenRect(ARect : TRect) : TBitmap;
{ Копиpование всего экpана }
function CaptureScreen : TBitmap;
{ Копиpование клиентской области фоpмы или элемента }
function CaptureClientImage(Control : TControl) : TBitmap;
{ Копиpование всей фоpмы элемента }
function CaptureControlImage(Control : TControl) : TBitmap;
{ Преобразование BMP в JPEG}
procedure ConvertBMP2JPEG(BMP:TBitmap; JPEGStr:String);
{===============================================================}
implementation
procedure ConvertBMP2JPEG(BMP:TBitmap; JPEGStr:String);
// converts a bitmap, the graphic of a TChart for example, to a jpeg
var
jpgImg: TJPEGImage;
// bitmap:TBitmap;
begin
bmp:=TBitmap.Create;
bmp:=CaptureScreen;
// bmp.LoadFromFile(BMPStr);
jpgImg := TJPEGImage.Create;
jpgImg.Assign(bmp);
jpgImg.SaveToFile(JPEGStr);
bmp.Free;
JpgImg.Free;
end;
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.
Как скопировать экран в файл когда играет видео?
← →
Volf_555 © (2006-03-04 18:56) [1]Извиняюсь - допустил неточность:
Вот с помощью этой процедуры я захватывваю экран и преобразовываю в формат JPEG:ScrnCap.ConvertBMP2JPEG(ScrnCap.CaptureScreen,s+".jpeg");
← →
Eraser © (2006-03-05 12:45) [2]
> Volf_555 © (04.03.06 18:55)
> Нужна функция, которая будет копировать экран во время проигрывания
> видео в файл.
наивный. Программ, которые умеют делать это штук 5 всего... если не меньше )
← →
kami © (2006-03-05 13:45) [3]Volf_555 © (04.03.06 18:56) [1]
Ищи оверлей и перекодируй его обратно в RGB , простой захват экрана тут не поможет, прочитай http://www.delphimaster.ru/articles/directx/index.html
Страницы: 1 вся ветка
Текущий архив: 2006.05.28;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.011 c