Текущий архив: 2006.02.12;
Скачать: CL | DM;
ВнизКак поменять разрешение ? Найти похожие ветки
← →
palgen © (2005-09-02 10:08) [0]Пользуюсь DShow и узнаю разрешение с помощью такой штуки
//==================================================
width := VIDEOINFOHEADER(pMt.pbFormat^).bmiHeader.biWidth;
height:= VIDEOINFOHEADER(pMt.pbFormat^).bmiHeader.biHeight;
//==================================================
А какими командами можно сменить разрешение ? В хелпе я не нашел.
← →
Valera (2005-09-04 03:41) [1]palgen © (02.09.05 10:08)
Пользуюсь DShow и узнаю разрешение с помощью такой штуки
//==================================================
width := VIDEOINFOHEADER(pMt.pbFormat^).bmiHeader.biWidth;
height:= VIDEOINFOHEADER(pMt.pbFormat^).bmiHeader.biHeight;
//==================================================
А какими командами можно сменить разрешение ? В хелпе я не нашел.
Тут врятли помогут команды, чтобы изменить разрешение и получить новое таким способом, нужно перекодировать файл. (DivX тут поможет).
← →
palgen © (2005-09-05 07:48) [2]Хорошо. А как подключить DivX ? Подскажите пожалуста.
← →
palgen © (2005-09-05 08:20) [3]Подключаю следующим образом
//=============================================================
begin
FilterGraph.ClearGraph;
FilterGraph.Active := false;
Filter.BaseFilter.Moniker := SysDev.GetMoniker(TMenuItem(Sender).tag);
FilterGraph.Active := true;
with FilterGraph as ICaptureGraphBuilder2 do
RenderStream(@PIN_CATEGORY_PREVIEW, nil, Filter as IBaseFilter, SampleGrabber as IBaseFilter, VideoWindow as IbaseFilter);
FilterGraph.Play;
end;
← →
Valera (2005-09-05 10:56) [4]Подключать не нужно, я имел ввиду пережать сам файл, а насчет изминения размера тебе надо сперва получить картинку хотя бы имедж. Я это делал с помощью библиотеки Graphics и не претендую на точность кода, но смысл должен быть понятен:
procedure TfrmGrabber.GetBitmap(APos: Double);
var
pdata : Pointer;
bmi : PBitmapInfo;
bmih : PBitmapInfoHeader;
tbmih : TBitmapInfoHeader;
tbmi : TBitmapInfo;
begin
if (ImgWidth <> 0) and (ImgHeight <> 0) and (NbVideo > 0) then
begin
if DIBSize=0 then
begin
if S_OK <> dsMediaDet.GetBitmapBits(APos, @DIBsize, nil, ImgWidth, ImgHeight) then
exit;
if buffer <> nil then FreeMem(buffer);
buffer:=AllocMem(DIBSize);
if buffer = nil then
raise EOutOfMemory.Create("Не хватает памяти для пикселей изображения");
end;
if S_OK <> dsMediaDet.GetBitmapBits(APos, nil, buffer, ImgWidth, ImgHeight) then
begin
FreeMem(buffer);
buffer:= nil;
exit;
end;
bmih:=PBitmapInfoHeader(buffer);
tbmih:=bmih^;
bmi:=AllocMem(sizeof(TBitmapInfo));
CopyMemory(@bmi.bmiHeader, @tbmih, sizeof(TBITMAPINFOHEADER));
tbmi:=bmi^;
try
bmp:= TBitmap.Create;
bmp.Handle := CreateDIBSection(0, bmi^, DIB_RGB_COLORS, pdata, 0, 0);
inc(pbyte(buffer),sizeof(TBITMAPINFOHEADER));
Move(buffer^, pdata^, DIBSize-sizeof(TBITMAPINFOHEADER));
dec(pbyte(buffer),sizeof(TBITMAPINFOHEADER));
ImgView321.Bitmap.Assign(bmp);
//FreeMem(buffer);
finally
FreeMem(bmi);
bmp.Free;
end;
end
else
begin
ImgView321.Bitmap.Clear;
ImgView321.Bitmap.Font.Name:= "Times New Roman";
ImgView321.Bitmap.Font.Size:= 32;
ImgView321.Bitmap.RenderText(20, 20, "Кадр не загружен", 4, clLime32);
end;
end;
Переделай код, что бы картинку загрузить в Image и изменяй ее размеры сколько угодно.
← →
palgen © (2005-09-05 13:11) [5]Мне фактически важен сам процесс изменения размеров... Вот достал код на С :
//===========================================================
HRESULT TVideoCap::SetupRecordingFormat (IBaseFilter *p_sSrcFilter)
{
HRESULT hr = NULL;
IAMStreamConfig *pConfig = NULL;
VIDEO_STREAM_CONFIG_CAPS scc;
AM_MEDIA_TYPE *pmtConfig;
// Получаем интерфейс параметров изображения захвата картой
hr = pCaptureRec->FindInterface(
&PIN_CATEGORY_CAPTURE, // Preview pin.
0, // Any media type.
p_sSrcFilter, // Pointer to the capture filter.
IID_IAMStreamConfig, (void**)&pConfig);
hr = pConfig->GetStreamCaps(0, &pmtConfig, (BYTE*)&scc);
pmtConfig->subtype = MEDIASUBTYPE_YUY2; // Устанавливаем формат цвета YUY2
VIDEOINFOHEADER *pVih = reinterpret_cast<VIDEOINFOHEADER*>(pmtConfig->pbFormat);
pVih->bmiHeader.biWidth = 384;
pVih->bmiHeader.biHeight = 288;
pConfig->SetFormat(pmtConfig); // Устанавливаем формат
pConfig->Release();
return S_OK;
}
//==============================================================
Можно ли его как нибудь переделать на Delphi ?
← →
Valera (2005-09-05 15:21) [6]Посмотри сдесь, а также поищи на этом же форуме
http://progdigy.com/modules.php?name=Forums&file=viewtopic&t=2209&start=0&postdays=0&postorder=asc&highlight=set+size+vi deo
надеюсь найдешь ответ на неим
← →
Valera (2005-09-05 15:23) [7]сорри
http://progdigy.com/modules.php?name=Forums&file=viewtopic&t=2209&highlight=set+size+video
← →
palgen © (2005-09-07 12:23) [8]Спасибо. Хороший сайт. Я нашел то, что искал. Вот листинг
//=========================================================
function SetVideoParams(CB_B2: ICaptureGraphBuilder2; Category: TGUID;
fSource: IBaseFilter): HResult;
var
StreamConf: IAMStreamConfig;
PAMT: PAMMediaType;
begin
Result:= E_FAIL;
StreamConf:= nil;
PAMT:= nil;
try
Result:= CB_B2.FindInterface(@Category, @MEDIATYPE_Video, fSource, IID_IAMStreamConfig, StreamConf);
if Assigned(StreamConf) then
begin
StreamConf.GetFormat(PAMT);
if Assigned(PAMT) then
begin
if PAMT.cbFormat= sizeOf(TVideoInfoHeader) then
begin
PVIDEOINFOHEADER(PAMT^.pbFormat)^.bmiHeader.biWidth:= 768;
PVIDEOINFOHEADER(PAMT^.pbFormat)^.bmiHeader.biHeight:= 576;
PVIDEOINFOHEADER(PAMT^.pbFormat)^.bmiHeader.biBitCount:= 24; //rgb24
PVIDEOINFOHEADER(PAMT^.pbFormat)^.AvgTimePerFrame:= 10000000 div 25; //25 fps
with PVIDEOINFOHEADER(PAMT^.pbFormat)^.bmiHeader do
PAMT^.lSampleSize := ((biWidth + 3) and (not (3))) * biHeight * biBitCount shr 3;
PVIDEOINFOHEADER(PAMT^.pbFormat)^.bmiHeader.biSizeImage:= PAMT^.lSampleSize;
end;
Result:= StreamConf.SetFormat(PAMT^)
end;
end;
result:= S_OK;
except
on E: Exception do
MessageBox(0, PChar(E.Message), "", MB_OK or MB_ICONERROR);
end;
StreamConf:= nil;
if Assigned(PAMT) then
DeleteMediaType(PAMT);
end;
//============================================================
SetVideoParams(FilterGraph as ICaptureGraphBuilder2, PIN_CATEGORY_CAPTURE, Filter as IBaseFilter);
//============================================================
это всё ...
Страницы: 1 вся ветка
Текущий архив: 2006.02.12;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.039 c