2440+WINCE5.0摄像头拍照问题

sjh008   2010-6-4 15:27 楼主

请教大家个问题我用的是2440+WINCE5。0 摄像头是OV9650 驱动是立宇泰的现在在LCD屏可以显示图像,可以拍照但是,在打开应用程序时连续拍二张照后会在拍第三张时会出现异常对话框,并且DNW窗口串口1打印出现这样的信息
RaiseException: Thread=839e05e8 Proc=81c76ac0 'Cameratest.exe'
AKY=00000401 PC=03fb44d8(coredll.dll+0x000444d8) RA=80213478(NK.EXE+0x00013478) BVA=00000000 FSR=00000000

如果退出了这个摄像头程序重新在打开它和以上一样,又可以拍二张照然后拍第三张时会出现异常对话框,并且DNW窗口串口1打印那样的信息

如果在控制面板里面我把 存储内存调小点且 程序内存变大了那么就可以多拍几张然后在报错,不知这怎么处理期待大家的答复找了两天了没找到问题急死人了


应用程序拍照代码如下:

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;
// if(width>640)
  width=320;
// if(height>480)
  height=240;
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;
}

回复评论 (4)

在你的驱动层是不是也开了一个数据区,用来放数据?
DC用了怎么不删除?
楼主再仔细找找吧!
点赞  2010-6-4 17:01
明天给你我的正常的看看。

点赞  2010-6-4 22:59
申请的内存释放掉看看~
点赞  2010-6-5 14:06
mark
点赞  2010-6-9 16:11
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复