Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2006.05.28;
Скачать: [xml.tar.bz2];

Вниз

Как сделать копию экрана когда играет видео?   Найти похожие ветки 

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2006.05.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.011 c
4-1141297063
MaxLMN
2006-03-02 13:57
2006.05.28
RichEdit


2-1147277350
Nicky
2006-05-10 20:09
2006.05.28
Как запаролить форму


2-1147515507
2006_A
2006-05-13 14:18
2006.05.28
Реогирование на кнопку "windows"


4-1141928957
Tristania
2006-03-09 21:29
2006.05.28
Добавление пункта меню


15-1146549885
sapsi
2006-05-02 10:04
2006.05.28
Профсоюз работников ИТ





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский