設定影片品質
[與此頁面相關聯的功能,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,但控制相機本身的各種設定:
- 暴露
- 專注
- 虹膜
- 鍋子
- 滾
- 傾斜
- 縮放
若要使用此介面,請遵循用於 IAMVideoProcAmp的相同步驟:
- 查詢 IAMCameraControl的擷取篩選。
- 呼叫 IAMCameraControl::GetRange,以尋找支援哪些設定,以及每個設定的可能範圍。
- 呼叫 IAMCameraControl::Get 以取得設定的目前值。
- 呼叫 IAMCameraControl::Set 來設定值。
相關主題