void CCameratestDlg::OnButton3()
{
// TODO: Add your control notification handler code here
PINGPONG_PR image;
WORD width=GetSystemMetrics(SM_CXSCREEN);
WORD height=GetSystemMetrics(SM_CYSCREEN);
BOOL ret;
BYTE* DDBdata=new BYTE[width*height*2];
BYTE* DIBdata;
ret=DeviceIoControl(m_hled,CAM_IOCTL_SAMSUNG_CAM_PR,NULL,NULL,(PBYTE)&image,NULL,NULL,NULL);
if(!ret)
AfxMessageBox(_T("读取图片失败!"));
else
{
SetKMode(TRUE);
memcpy(DDBdata,(void *)image.rgb_address,width*height*2);
SetKMode(FALSE);
CBitmap bitmap;
HBITMAP dstBmp;
bitmap.CreateBitmap(width,height,1,16,DDBdata);
HDC hdcSrc = CreateCompatibleDC(NULL);
HDC hdcDst = CreateCompatibleDC(NULL);
BITMAPINFOHEADER bih = {0};//位图信息头
bih.biBitCount = 16;//每个像素字节大小
bih.biCompression = BI_RGB;
bih.biHeight = height;//高度
bih.biPlanes = 1;
bih.biSize = sizeof(BITMAPINFOHEADER);
bih.biSizeImage = 0;// width*height*2;//图像数据大小
bih.biWidth = width;//宽度
BITMAPFILEHEADER bfh = {0};//位图文件头
bfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);//到位图数据的偏移量
bfh.bfSize = bfh.bfOffBits + width*height*2;//文件总的大小
bfh.bfType = (WORD)0x4d42;
BITMAPINFO bi={0};
bi.bmiHeader=bih;
dstBmp=CreateDIBSection(hdcDst, (BITMAPINFO*)&bi, DIB_RGB_COLORS, (void **)&DIBdata, NULL, 0);
SelectObject(hdcDst, dstBmp);
SelectObject(hdcSrc, bitmap);
BitBlt(hdcDst, 0, 0, width, height, hdcSrc, 0, 0, SRCCOPY);
CFile file(_T("image.bmp"),CFile::modeCreate|CFile::modeReadWrite);
file.Write(&bfh,sizeof(bfh));
file.Write(&bih,sizeof(bih));
file.Write(DIBdata,width*height*2);
file.Close();
}
delete []DDBdata;
}
我用的是VS2005+wince6.0,编译以后:
1>正在编译...
1>OV9650Dlg.cpp
1>.\OV9650Dlg.cpp(306) : error C2065: 'PINGPONG_PR' : undeclared identifier
1>.\OV9650Dlg.cpp(306) : error C2146: syntax error : missing ';' before identifier 'image'
1>.\OV9650Dlg.cpp(306) : error C2065: 'image' : undeclared identifier
1>.\OV9650Dlg.cpp(323) : error C3861: 'SetKMode': identifier not found
1>.\OV9650Dlg.cpp(324) : error C2228: left of '.rgb_address' must have class/struct/union
1> type is ''unknown-type''
1>.\OV9650Dlg.cpp(325) : error C3861: 'SetKMode': identifier not found
1>Generating Code...
这是怎么回事?在应用程序中不能调用SetKMode()吗?'PINGPONG_PR' 是驱动程序中定义的一个结构体,在应用程序中能直接使用吗?如果不能通过SetKMode()获取内存缓冲区数据,如何在应用程序中操作才能够实现?