Главная страница
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.045 c
2-1147461468
Viconia
2006-05-12 23:17
2006.05.28
Посмотрите, плиз, запрос...


15-1146643908
tigra
2006-05-03 12:11
2006.05.28
Имена в архиве


6-1138364986
i-s-v
2006-01-27 15:29
2006.05.28
IDocument


3-1143869964
Некто
2006-04-01 09:39
2006.05.28
ФИО или Ф, И и О?


4-1141243206
g-l-u-k
2006-03-01 23:00
2006.05.28
Отлов окна по его классу