![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как захватить кадр, используя 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]Неужели никто не знает ?