數位相機作為一種目前常見的消費類商品,其基本工作原理是利用CCD光耦器件將光訊號轉變為電訊號,經過A/D轉換、資料壓縮等處理後經串口或USB口在PC端應用程式控制下將圖片(多為JPEG格式)傳送到PC機的硬碟中。
目前PC端的應用程式都由相機製造商所提供。很少有人注意到一些數位相機製造商為開發人員提供了相對豐富的SDK(Software Development Kit)資源,便於有關人員利用數位相機進行映像採集和監測方面的開發工作。SDK開發套件一般由標頭檔(.H)、庫檔案(.lib)和動態連結程式庫檔案(.dll)組成。美國柯達公司是世界相機製造業和諸多影像標準制定的帶頭兵。本文將以KODAK DC280 SDK為例對SDK及其應用作介紹,以使感興趣的開發人員可以自編程式將資料相機應用在工程項目中。
1 SDK結構圖
SDK控制層位於應用程式與指定SDK控制層(對於DS280相機此層為DC280SDK控制層)之間,它的主要作用是接收應用程式的DC280_OpenCamera()指令,同時將指定相機SDK控制層調入記憶體區;接收DC2x0_CloseCamera()指令,同時釋放指定相機SDK控制層所佔記憶體區。指定相機SDK層位於SDK控制層下,本層支援所有訪問相機的函數,並將函數執行結果狀態代碼(即錯誤碼)經SDK控制層上傳給應用程式。指定相機控制層的下層為驅動程式層。驅動程式用於與外部裝置直接打交道。
2 SDK函數分類
SDK內的函數按照作用類型一般可以分為以下幾類:
(1)相機初始化函數:主要包括_CloseCamera()和_OpenCamera()。
(2)相機控制函數:主要包括_GetStatus()、_GetConfig()、_SetConfig()、_ControlCameraTime()、_ControlCameraID()、_ControlTakePicture()、_ResetCamera()。
(3)圖片管理函數:_TakePicture()、_ResetCamera()。
(4)圖片資訊擷取函數:_GetCameraPictInfo()、_GetAllPictureName()、_GetNativePicture()。
(5)檔案傳遞函數:_GetFileFormCamera()、_SetFileToCamera。
(6)其他類型的函數:包括電池電量資料擷取函數、最後一次操作返回碼擷取函數等。
3 SDK用法的一個典型執行個體
下面舉一個拍攝圖片的簡單一實例使讀者大體瞭解編程的一般模式,其過程如圖2所示。首先是相機初始化即開啟相機,然後讀取目前相機中拍攝方面的參數設定,根據需要修改某些參數設定,接著拍攝圖片,最後關閉相機釋放記憶體。常式如下:
以下為SDK用法的典型常式:
#include "F210.h"
OSErr ret;
DC280_Camera ;Camera;
DC280_ImgProcData ThumbImgInfo;
DC280_TakePictInfo TakePictInfo;
DC280_PictInfo GenericPictInfo;
DC280_SpecificPictInfo SpecificPictInfo;//開啟相機
DC280_OpenCamera(VersionData,CameraData); //擷取相機設定參數
ret=DC280_ControlTakePicture(&Camera,TRUE,0L,(VOIDPTR &TakePictInfo);
//修改需要變動的參數
ret=DC280_ControlTakePicture(&Camera,FALSE,(VOIDPTR&TakePictInfo); //拍照
ret=DC280_TakePicture(&Camera,TRUE,&ThumbImgInfo,&GenericPictInfo,(VOIDPTR)&SpecificPictInfo);
//可以根據需要加上檔案傳遞函數等
DC210_CloseCamera(CameraData); //關閉相機
其中DC280_ControlTakePicture的第二個參數為GetSetFlag。當其為true時表示從相機中擷取設定參數;為false時表示將改動過的參數輸送給相機。DC280_Camera的資料結構如下:
typedef struct {DC210_PortNum PortNum;
DC210_BitRate BitRate;
DC210_CameraType CamType;
BOOL CameraOpenFlag;
VOIDPTR InternalUseOnly;
}DC280_Camera ;
本文通過柯達公司的DC280 SDK開發工具對SDK及利用它開發相機應用程式進行了簡單介紹。其他公司SDK的使用方法基本類似,只是函數名稱略有不同,使用方法是一致的。SDK中函數及其參數的詳細說明,可以在相機製造商的英文網站上從開發工具一覽中找到。