|
用EVC编写的针对OV9650摄像头图片保存程序,但是保存的图片提示说格式不对,下面是源码,请大家帮忙看看,小弟哪里写错了。
const char filename[] = "Image1.bmp";
//ReadFile(hCam, Buffer, 320*240*2,&readsize,NULL);
DeviceIoControl(hCam,CAM_IOCTL_GET_LATEST_FRAME,NULL,NULL,Buffer,NULL,NULL,NULL);
//initialise the struct BITMAPINFO for the bimap infomation,
//in order to use the function CreateDIBSection
//on wince os, each pixel stored by 16 bits(biBitCount=16)
//and no compressing(biCompression=0)
BITMAPINFO RGB16BitsBITMAPINFO; //初始化结构体BITMAPINFO来存储位图的信息
ZeroMemory(&RGB16BitsBITMAPINFO, sizeof(BITMAPINFO)); //给结构体的每个参数清零
RGB16BitsBITMAPINFO.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
RGB16BitsBITMAPINFO.bmiHeader.biWidth = 320; //位图的宽度(像素)
RGB16BitsBITMAPINFO.bmiHeader.biHeight = 240; //位图的高度(像素)
RGB16BitsBITMAPINFO.bmiHeader.biPlanes = 1; //参数必须设置为1
RGB16BitsBITMAPINFO.bmiHeader.biBitCount = 16; //16色,即每个像素由2个字节组成
//bimap file header in order to write bmp file
BITMAPFILEHEADER bmBITMAPFILEHEADER;
ZeroMemory(&bmBITMAPFILEHEADER, sizeof(BITMAPFILEHEADER));
bmBITMAPFILEHEADER.bfType =19778; //bmp
bmBITMAPFILEHEADER.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
bmBITMAPFILEHEADER.bfSize = bmBITMAPFILEHEADER.bfOffBits + ((320*240)*2); ///3=(24 / 8)//3表示每个像素由3个字节组成
FILE *mStream = NULL;
if((mStream = fopen(filename, "wb")))
{
//write bitmap file header
fwrite(&bmBITMAPFILEHEADER, sizeof(BITMAPFILEHEADER), 1, mStream);
//write bitmap info
fwrite(&(RGB16BitsBITMAPINFO.bmiHeader), sizeof(BITMAPINFOHEADER), 1, mStream);
//write bitmap pixels data
fwrite(Buffer,2*320*240, 1, mStream);
//close file
fclose(mStream);
} |
|