使用.net compact framework控制pocket pc 的攝像機

使用攝像機
      用戶從“文件”菜單中選擇“新建背景”時,應用程序將創建並顯示新的 CameraCaptureDialog 實例。該實例與 SelectPictureDialog 在相同的程序集 Microsoft.WindowsMobile.Forms 中。該對話框允許完整配置攝像機的初始設置,儘管用戶仍然可以通過常規選項菜單調整它們。Mode 屬性指定用戶是否只能拍攝單張照片 (CameraCaptureMode.Still)、視頻 (CameraCaptureMode.VideoOnly) 或帶音頻的視頻 (CameraCaptureMode.VideoWithAudio)。由於希望拍攝背景圖像,因此需要讓應用程序將對話框設置爲靜止圖片模式,並且讓靜止圖像使用最高質量(使用 StillQuality 屬性)。還可以設置指示視頻長度的可選時間限制的屬性 (VideoTimeLimit),以及確保視頻適合以多媒體郵件發送的屬性 (VideoTypes)。
    也可以設置 Resolution 屬性以控制所拍圖片的大小。通常,不支持任意值。而應當使用設備可接受的值(例如,640×480 或 1280×1024)。由於需要縮小圖片以適應屏幕,因此請保留 Resolution 的默認值。
     一旦用戶拍攝了圖片,ShowDialog 方法將返回 DialogResult.OK 作爲結果。現在,若要加載新拍攝的圖片,可以使用前面用過的相同縮放技術,將現有圖像調整到背景大小。由於只替換背景圖像,因此用戶已繪製的任何線條或文本將保持不變。一旦圖片繪製到背景上,即可對整個客戶端矩形調用 Invalidate,這將導致用現在顯示爲背景的新圖片重繪屏幕。
檢查系統狀態
      您可以顯示 CameraCaptureDialog,然後,如果設備沒有攝像機,則引發 InvalidOperationException。但是,更好的做法是提早確定攝像機功能是否存在,然後,如果設備不提供攝像機功能,只需禁用該菜單選項。可以通過查詢設備的常規配置並監視實時屬性的更改情況來執行此任務。
      有關設備的信息可通過 SystemState 類進行公開,該類在 Microsoft.WindowsMobile.Status 程序集中。通過添加對該程序集及其依賴項 Microsoft.WindowsMobile 的引用,可以在應用程序中使用此信息。SystemState 類有許多靜態屬性,通過它們可以確定固定配置信息和實時信息,例如當前日期和時間或電池剩餘電量。
      應用程序只需在啓動時檢查一次 CameraPresent 屬性,然後,如果攝像機不可用,應用程序就可以禁用“新建背景”菜單選項。但是,SystemState 類公開您可以處理的 Changed 事件,以便在請求狀態發生更改時得到通知。這樣,不必使用靜態屬性,就可以創建 SystemState 實例,並將要監視的特定系統屬性傳遞到構造函數中,然後只需添加 Changed 事件的處理程序。例如,可以擴展應用程序以監視 DisplayRotation 系統屬性,以便當應用程序在用戶滑出設備的鍵盤以及顯示設備從縱向更改到橫向時得到通知。或者,應用程序可以監視 ActiveSyncStatus 屬性,以便有可能在設備正在執行同步時執行某些操作。
      在引發 Changed 事件之前,SystemState 類還會考慮 ComparisonType 和 ComparisonValue 屬性。默認情況下,受監視屬性中的所有更改都會引發 Changed 事件。但是,如果(例如)將 ComparisonType 屬性設置爲 ComparisonType.Greater 並將 ComparisonValue 屬性設置爲 2,則只有當正在監視的系統屬性更改爲大於 2 的值,纔會引發 Changed 事件。通過使用其他比較類型(比如 Equals、Contains 或 StartsWith),您將能夠對應用程序處理哪些事件進行很細緻的控制。
     SystemState 的主要限制是,當狀態發生更改時,應用程序必須正在運行,才能使它得到通知。還需要確保將您正在處理其 Changed 事件的 SystemState 實例聲明爲類級別的字段,而不是局部方法變量,以便它不會被垃圾收集,從而導致丟失事件。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章