Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.49 MB
Время: 0.034 c
2-1138083711
Mike48
2006-01-24 09:21
2006.02.12
Подскажите литературу......


4-1133159522
mrGrey2
2005-11-28 09:32
2006.02.12
Работа с портом PS/2


11-1118647887
konst
2005-06-13 11:31
2006.02.12
Работа со статусной строкой


4-1132937339
dnkbu
2005-11-25 19:48
2006.02.12
Winlogon Notify


2-1138324492
Лом
2006-01-27 04:14
2006.02.12
что за глюк !