Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.48 MB
Время: 0.042 c
2-1147560405
EZHIK
2006-05-14 02:46
2006.05.28
Разные действия для одной кнопки.


10-1119366290
Denis17
2005-06-21 19:04
2006.05.28
События COM-сервера на удаленной машине


2-1147380746
EZHIK
2006-05-12 00:52
2006.05.28
Кнопки назад и вперед и вернуться.


15-1146112390
Карелин Артем
2006-04-27 08:33
2006.05.28
Нужны программисты в Самаре на полный день.


15-1146502169
KilkennyCat
2006-05-01 20:49
2006.05.28
Поскольку конкурс давно прошел, публикую...