線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2045
推到 Plurk!
推到 Facebook!

關於DSPack (DirectShow)如何解析度提高 跟影像複製到Image上(限制在320*240) 測試結果問題*以解決了*

尚未結案
foxwinenr
一般會員


發表:1
回覆:2
積分:0
註冊:2009-03-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-01-20 20:54:37 IP:163.13.xxx.xxx 訂閱
第一次 發問 還請多多包涵
以下是研究幾天的結果
從安裝到範例成果
還是不懂 如何使用DSPack(DirectShow)
此範例是:
1.可以調解析度
2.可以複製到Image
Image 複製限制
問題:
我要把攝影機解析度固定在1280*960 並且可以複製在Image上
請問我要如何修改此程式範例
在此感謝各位先進的協助

[code cpp]
//---------------------------------------------------------------------------
#include
#pragma hdrstop

#include "main.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "DSPack"
#pragma resource "*.dfm"
TMainForm *MainForm;
TSysDevEnum *SysDev;

//---------------------------------------------------------------------------
__fastcall TMainForm::TMainForm(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::FormCreate(TObject *Sender)
{
/* SysDev = new TSysDevEnum(CLSID_VideoInputDeviceCategory);
if (SysDev->CountFilters > 0) {
int i;
TMenuItem *Device;
for(i = 0; i < SysDev->CountFilters; i ) {
Device = new TMenuItem(Devices);
Device->Caption = SysDev->Filters[i].FriendlyName;
Device->Tag = i;
Device->OnClick = DevicesClick;
Devices->Add(Device);
}
};*/

SysDev = new TSysDevEnum(CLSID_VideoInputDeviceCategory);
if (SysDev->CountFilters > 0) {
int i,j;
TMenuItem *Device;
TMenuItem *SubItem;
IBaseFilter *SourceFilter = NULL;
for(i = 0; i < SysDev->CountFilters; i )
{Device = new TMenuItem(Devices);
Device->Caption = SysDev->Filters[i].FriendlyName;
Device->Tag = i;
//Device->OnClick = DevicesClick;
Devices->Add(Device);

//FilterGraph->ClearGraph();
FilterGraph->Active = false;
Filter->BaseFilter->Moniker = SysDev->GetMoniker(i);
FilterGraph->Active = true;
CheckDSError(Filter->QueryInterface(IID_IBaseFilter, &SourceFilter));
TPinList *PinList=new TPinList(SourceFilter);
TEnumMediaType *VideoMediaTypes=new TEnumMediaType(PinList->First());
char buffer[1024];
for(j=0 ; j<VideoMediaTypes->Count ; j )
{SubItem=new TMenuItem(Devices);
sprintf(buffer,"%s",VideoMediaTypes->MediaDescription[j]);
//MediaDescription內容如下
//Major Type:Video . Sub Type: RGB24 Format: Videoinfo RGB 320X240,24 bits
//從第58個字元當作item的標題 ^^^^^^^^^^^^^^^
/*要得到個別的資訊可使用下列的程式碼
VIDEOINFOHEADER *pVih;
long Width,Height,BitCount;
pVih=(VIDEOINFOHEADER*)VideoMediaTypes->Items[j]->Format();
BitCount=pVih->bmiHeader.biBitCount;//24 bits
Width = pVih->bmiHeader.biWidth; //320
Height = pVih->bmiHeader.biHeight; //240
*/
SubItem->Caption = buffer 58;
SubItem->Tag = j;
SubItem->OnClick = DevicesClick;
Device->Add(SubItem);
}
delete PinList;
delete VideoMediaTypes;
}
FilterGraph->ClearGraph();
FilterGraph->Active = false;
};
this->DoubleBuffered=true;
}
//---------------------------------------------------------------------------


void __fastcall TMainForm::DevicesClick(TObject *Sender)
{
FilterGraph->ClearGraph();
FilterGraph->Active = false;
Filter->BaseFilter->Moniker = SysDev->GetMoniker(((TMenuItem *)Sender)->Tag);
FilterGraph->Active = true;
ICaptureGraphBuilder2 *Graph = NULL;
IBaseFilter *SourceFilter = NULL;
IBaseFilter *VideoFilter = NULL;
CheckDSError(FilterGraph->QueryInterface(IID_ICaptureGraphBuilder2, &Graph));
CheckDSError(VideoWindow->QueryInterface(IID_IBaseFilter, &VideoFilter));
CheckDSError(Filter->QueryInterface(IID_IBaseFilter, &SourceFilter));
IBaseFilter *SampleFilter=NULL;
CheckDSError(SampleGrabber1->QueryInterface(IID_IBaseFilter,&SampleFilter));
//Graph->RenderStream(&PIN_CATEGORY_PREVIEW, NULL, SourceFilter, NULL, VideoFilter);
Graph->RenderStream(&PIN_CATEGORY_PREVIEW, NULL, SourceFilter, SampleFilter, VideoFilter);
FilterGraph->Play();
Graph->Release();
VideoFilter->Release();
SourceFilter->Release();
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::FormDestroy(TObject *Sender)
{
delete SysDev;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::FormCloseQuery(TObject *Sender, bool &CanClose)
{
FilterGraph->Active = false;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::Button1Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::SampleGrabber1Buffer(TObject *sender,
double SampleTime, Pointer pBuffer, int BufferLen)
{

SampleGrabber1->GetBitmap(Image1->Picture->Bitmap, pBuffer, BufferLen);

}
//---------------------------------------------------------------------------
void __fastcall TMainForm::Button2Click(TObject *Sender)
{
IsCapure=true;
}
//---------------------------------------------------------------------------


[/code]

附加檔案:4b56fd0d71517_Playcap.rar
編輯記錄
foxwinenr 重新編輯於 2010-01-20 20:59:10, 註解 無‧
foxwinenr 重新編輯於 2010-01-21 14:23:45, 註解 無‧
foxwinenr 重新編輯於 2010-01-21 20:07:51, 註解 無‧
foxwinenr 重新編輯於 2010-01-21 20:09:03, 註解 無‧
foxwinenr 重新編輯於 2010-01-23 13:19:34, 註解 無‧
foxwinenr 重新編輯於 2010-02-05 15:04:12, 註解 無‧
foxwinenr
一般會員


發表:1
回覆:2
積分:0
註冊:2009-03-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-01-28 15:35:31 IP:163.13.xxx.xxx 訂閱
不好意思!
請問哪邊可以得到這方面相關的資訊??
MediaType 這SIZE 如何增大??
是原本的設計元件 就已經寫死了!
雖然可以提高解析度(攝影機) 但是不能把提高的解析度複製在Image上 (只能320*240)
卡在這邊一陣子了
還請各位先進多多指教
再此感謝各位
編輯記錄
foxwinenr 重新編輯於 2010-01-28 16:08:45, 註解 無‧
foxwinenr 重新編輯於 2010-01-28 16:35:25, 註解 無‧
foxwinenr
一般會員


發表:1
回覆:2
積分:0
註冊:2009-03-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2010-02-05 15:02:58 IP:163.13.xxx.xxx 訂閱
以解決
感謝
^^
系統時間:2024-04-26 8:08:01
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!