使用SHCameraCapture介面可以調出照相機進行拍照、攝像,並得到圖片或視頻檔案的路徑。
以下代碼進行拍照:
SHCAMERACAPTURE shcc;
ZeroMemory(&shcc, sizeof(shcc));
shcc.cbSize = sizeof(shcc);
shcc.hwndOwner = NULL;
shcc.pszInitialDir = NULL;
shcc.pszDefaultFileName = NULL;
shcc.pszTitle = NULL;
shcc.StillQuality = CAMERACAPTURE_STILLQUALITY_DEFAULT;
shcc.VideoTypes = CAMERACAPTURE_VIDEOTYPE_ALL;
shcc.nResolutionWidth = 0;
shcc.nResolutionHeight = 0;
shcc.nVideoTimeLimit = 0;
shcc.Mode = CAMERACAPTURE_MODE_STILL;
HRESULT hReturn = SHCameraCapture(&shcc);
如果hReturn為S_OK,則表示拍照成功,shcc.szFile即為檔案名稱(包含路徑)。shcc.pszInitialDir和shcc.pszDefaultFileName可以設定儲存路徑和預設檔案名稱。shcc.hwndOwner如果使用了不同的表單,可能會有問題。
如果要進行攝像,有些參數需進行調整,如下
shcc.StillQuality = CAMERACAPTURE_STILLQUALITY_NORMAL;
shcc.VideoTypes = CAMERACAPTURE_VIDEOTYPE_STANDARD;
shcc.nResolutionWidth = 640;
shcc.nResolutionHeight = 480;
shcc.Mode = CAMERACAPTURE_MODE_VIDEOWITHAUDIO;
這些參數涉及到幾個枚舉變數,我們來看看:
typedef enum {
CAMERACAPTURE_MODE_STILL = 0,
CAMERACAPTURE_MODE_VIDEOONLY,
CAMERACAPTURE_MODE_VIDEOWITHAUDIO,
} CAMERACAPTURE_MODE;
CAMERACAPTURE_MODE_STILL對應照片,CAMERACAPTURE_MODE_VIDEOONLY對應無聲視頻,CAMERACAPTURE_MODE_VIDEOWITHAUDIO對應有聲視頻。
typedef enum {
CAMERACAPTURE_STILLQUALITY_DEFAULT = 0,
CAMERACAPTURE_STILLQUALITY_LOW,
CAMERACAPTURE_STILLQUALITY_NORMAL,
CAMERACAPTURE_STILLQUALITY_HIGH,
} CAMERACAPTURE_STILLQUALITY;
對應圖片和視頻清晰度。
typedef enum {
CAMERACAPTURE_VIDEOTYPE_ALL = 0xFFFF,
CAMERACAPTURE_VIDEOTYPE_STANDARD = 1,
CAMERACAPTURE_VIDEOTYPE_MESSAGING = 2,
} CAMERACAPTURE_VIDEOTYPES;
CAMERACAPTURE_VIDEOTYPE_ALL對應照片,CAMERACAPTURE_VIDEOTYPE_STANDARD對應WMV視頻,CAMERACAPTURE_VIDEOTYPE_MESSAGING對應MMS視頻。當使用後兩個值時,shcc的nResolutionWidth和nResolutionHeight成員均不能為零。一般是640x480。
很遺憾,這個介面只能在WM5.0以上使用。WM2003上沒有統一網路攝影機標準,硬體廠商各做各的,只能跟硬體廠商詢問調用方法。