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

Вниз

Как поменять разрешение ?   Найти похожие ветки 

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

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

Наверх





Память: 0.47 MB
Время: 0.043 c
15-1137498839
saNat
2006-01-17 14:53
2006.02.12
Несколько вопросов к Мастерам


2-1138253636
Kot_
2006-01-26 08:33
2006.02.12
Как получить текст ошибки и сохранить его в файл.


15-1137394603
Nic
2006-01-16 09:56
2006.02.12
Чё-то с погодой не то...


2-1138080657
Janbolat
2006-01-24 08:30
2006.02.12
FTP-Админ как?


4-1133358539
remlin
2005-11-30 16:48
2006.02.12
считывание данных с эл.тахеометра





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский