Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как захватить кадр, используя DirectShow ? [D6, Win2k]


palgen ©   (2005-08-31 14:40:00) 

Подскажите как с помошью DirectShow получать картинку в буфер обмена (из видеопотока, допустим, раз в секунду) с разрешением 720*576, а затем (ежесекундно) помещать этот захваченный кадр на TImage ?


vrem   (2005-09-05 19:21:00) [1]

[6] palgen ©   (05.09.05 07:52)
>А каким образом ?
dscaler, www.dscaler.org, с исходными кодами - но вроде не на дельфи. Причём я рассматривал получающуюся картинку - там нет повторений, все 768 точек разные. обычно отбрасываются, т.к. тв плохо отображает по краям экрана


palgen   (2005-09-05 07:52:00) [2]

vrem   (02.09.05 19:18) [5]
зачем 720, 768*576 захватывается

А каким образом ?


vrem   (2005-09-02 19:18:00) [3]

зачем 720, 768*576 захватывается


Ботвин Дмитрий   (2005-09-02 13:13:00) [4]

Для JPEG можно так:

procedure GetResJpg(JPGFile: string);
const
  BufferSize = 50;
var
  Buffer: string;
  Index: integer;
  FileStream: TFileStream;
  HorzRes, VertRes: Word;
  DP: Byte;
  Measure: string;
begin
  FileStream := TFileStream.Create(JPGFile,
    fmOpenReadWrite);
  try
    SetLength(Buffer, BufferSize);
    FileStream.Read(buffer[1], BufferSize);
    Index := Pos('JFIF' + #0$00,buffer);
    if Index > 0 then
    begin
      FileStream.Seek(Index + 6, soFromBeginning);
      FileStream.Read(DP, 1);
      case DP of
        1: Measure := 'DPI'; //Dots Per Inch
       2: Measure := 'DPC'; //Dots Per Cm.
     end;
      FileStream.Read(HorzRes, 2); // x axis
     HorzRes := Swap(HorzRes);
      FileStream.Read(VertRes, 2); // y axis
     VertRes := Swap(VertRes);
    end
  finally
    FileStream.Free;
  end;
end;

procedure SetResJpg(name: string; dpix, dpiy: Integer);
const
  BufferSize = 50;
  DPI = 1; //inch
 DPC = 2; //cm
var
  Buffer: string;
  index: INTEGER;
  FileStream: TFileStream;
  xResolution: WORD;
  yResolution: WORD;
  _type: Byte;
begin
  FileStream := TFileStream.Create(name,
    fmOpenReadWrite);
  try
    SetLength(Buffer, BufferSize);
    FileStream.Read(buffer[1], BufferSize);
    index := POS('JFIF' + #0$00,buffer);
    if index > 0
      then begin
      FileStream.Seek(index + 6, soFromBeginning);
      _type := DPI;
      FileStream.write(_type, 1);
      xresolution := swap(dpix);
      FileStream.write(xresolution, 2);
      yresolution := swap(dpiy);
      FileStream.write(yresolution, 2);
    end
  finally
    FileStream.Free;
  end;
end;

а для bmp поищи в инете - примеров много...


palgen   (2005-09-02 09:30:00) [5]

Как можно выставить разрешение сграбленного фрейма ...
Лучше кодом, а то в  хелпе DSPack я этого не нашел ...


Ботвин Дмитрий   (2005-09-02 08:16:00) [6]

DSPack тебе поможет. Там в примерах уже что-то подобное реализовано...


palgen   (2005-09-02 07:07:00) [7]

Неужели никто не знает ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо