設定視訊品質
[與此頁面 相關的功能 DirectShow是舊版功能。 它已被 MediaPlayer、 IMFMediaEngine和 Media Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayer、 IMFMediaEngine 和 音訊/視訊擷取 ,而不是 DirectShow。 Microsoft 建議盡可能重寫使用舊版 API 的現有程式碼,以使用新的 API。]
本主題描述應用程式如何以程式設計方式變更視訊擷取裝置上的影像和相機設定。
ProcAmp 設定
Windows 驅動程式模型 (WDM) 相機可以支援控制影像品質的屬性:
- 反光補償
- 亮度
- 對比
- 獲得
- 色差補正
- 色調
- 飽和度
- 清晰度
- 白平衡
這些屬性是透過 IAMVideoProcAmp 介面來控制。 使用此介面,如下所示:
- 在IAMVideoProcAmp介面的擷取篩選上呼叫QueryInterface。
- 針對您想要設定的每個屬性,呼叫 IAMVideoProcAmp::GetRange 方法。 屬性是由 VideoProcAmpProperty 列舉所指定。 如果 GetRange 方法失敗,表示相機不支援該特定屬性。
- 如果 GetRange 成功,它會傳回屬性、預設值和最小增量的支援值範圍。
- 若要取得屬性的目前值,請呼叫 IAMVideoProcAmp::Get。
- 若要設定屬性,請呼叫 IAMVideoProcAmp::Set 方法。 若要將屬性還原為其預設值,請呼叫 GetRange 以尋找預設值,並將該值傳遞至 Set 方法。
設定屬性時,您不需要停止篩選圖形。
下列程式碼會設定追蹤列控制項,以便用來設定亮度。 追蹤列的範圍會對應到裝置支援的亮度範圍,而追蹤列的位置會對應到裝置的初始亮度設定。
HWND hTrackbar; // Handle to the trackbar control.
// Initialize hTrackbar (not shown).
// Query the capture filter for the IAMVideoProcAmp interface.
IAMVideoProcAmp *pProcAmp = 0;
hr = pCap->QueryInterface(IID_IAMVideoProcAmp, (void**)&pProcAmp);
if (FAILED(hr))
{
// The device does not support IAMVideoProcAmp, so disable the control.
EnableWindow(hTrackbar, FALSE);
}
else
{
long Min, Max, Step, Default, Flags, Val;
// Get the range and default value.
hr = m_pProcAmp->GetRange(VideoProcAmp_Brightness, &Min, &Max, &Step,
&Default, &Flags);
if (SUCCEEDED(hr))
{
// Get the current value.
hr = m_pProcAmp->Get(VideoProcAmp_Brightness, &Val, &Flags);
}
if (SUCCEEDED(hr))
{
// Set the trackbar range and position.
SendMessage(hTrackbar, TBM_SETRANGE, TRUE, MAKELONG(Min, Max));
SendMessage(hTrackbar, TBM_SETPOS, TRUE, Val);
EnableWindow(hTrackbar, TRUE);
}
else
{
// This property is not supported, so disable the control.
EnableWindow(hTrackbar, FALSE);
}
}
照相機設定
IAMCameraControl介面類別似于IAMVideoProcAmp,但控制相機本身的各種設定:
- 曝光
- 焦點
- 虹膜
- 移動瀏覽
- Roll
- 傾斜
- 縮放
若要使用此介面,請遵循用於 IAMVideoProcAmp的相同步驟:
- 查詢 IAMCameraControl的擷取篩選。
- 呼叫 IAMCameraControl::GetRange 以尋找支援的設定,以及每個設定的可能範圍。
- 呼叫 IAMCameraControl::Get 以取得設定的目前值。
- 呼叫 IAMCameraControl::Set 以設定值。
相關主題