6463|10

96

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

WinCE下Camera能正常显示影像,拍照时花屏 [复制链接]

三星2440 WinCE下的CameraTest测试程序在我的开发板上能正常显示影像,拍照保存下来的BMP图是花屏。不知道从哪里入手,请大家指教。贴一下拍照部分的代码。

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>320)
                width=320;
        if(height>240)
                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;
                 RETAILMSG(1,(TEXT("VideoWidth = %d, VideoHeight = %d\r\n"), width, height));
                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;
}
此帖出自WindowsCE论坛

最新回复

大家好,我用的S3C6400的开发板,使用MT9M112的摄像头模组,在开发板上很清楚,但是在自己设计的PCB板上,图像一直有闪屏的现象,在preview时。 停止preview时,画面静止,画面非常清晰和完好,但是一旦开始preview,画面就会有闪屏的现象。 我的视频信号经过  视频板---主板---cpu板,到达S3C6400,不知道是布线没布好,还是sensor的寄存器没设置好的原因,请高手给我解答,谢谢。 我的QQ  23806674  ,手机 13541260419 ,欢迎来电来函,QQ留言。本人平时上班的时候上不了网。  详情 回复 发表于 2009-8-18 00:32
点赞 关注
 

回复
举报

66

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
有没有可能是读入BMP时,YUV数据发生错位或者混乱了?
此帖出自WindowsCE论坛
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
引用 1 楼 daigua04 的回复:
有没有可能是读入BMP时,YUV数据发生错位或者混乱了?


怎样知道YUV数据发生错位或者混乱了?用什么方法测试?
此帖出自WindowsCE论坛
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

4
 
首先就是你得到图像是不是rgb的,然后给rgb加个文件头,这样才能显示成bmp图像。

如果你的得到得是ycbcr,那么直接加个文件头是不行的。要转化成rgb才可以显示成bmp。

从你的代码好想看不出你得到的图像是什么格式的
此帖出自WindowsCE论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

5
 
预览可以,保存图像就不行,那只可能是保存图像过程中,数据出现问题了!如上楼所说,如果是YUV,需要转换为RGB,然后再存入BMP的。我现在就是这样做的,因为如果我直接使用RGB格式,预览和拍照都是花屏!
此帖出自WindowsCE论坛
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

6
 
你可能真的犯了低级错误,就是没有将YUV转换为RGB,而是直接存储了!
此帖出自WindowsCE论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

7
 
想和楼上讨论讨论电源管理,可是每次加为好友都没了消息,真的大牌啊。
此帖出自WindowsCE论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

8
 
hitszj604说的是我吗?我好像没有看到啊?讨论电源管理,非常乐意啊!
此帖出自WindowsCE论坛
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

9
 
引用 4 楼 daigua04 的回复:
预览可以,保存图像就不行,那只可能是保存图像过程中,数据出现问题了!如上楼所说,如果是YUV,需要转换为RGB,然后再存入BMP的。我现在就是这样做的,因为如果我直接使用RGB格式,预览和拍照都是花屏!


还有没有一种可能的现象是,当影像的尺寸大小和拍下来的图像大小不一样的时候,也同样会花屏。我发现显示的影像大小不是320X240,右边有空出一块区域放按钮,而拍下来的照片大小是完全的320X240,我有试过更改影像的显示大小,发现改过后显示的影像也花屏了。
此帖出自WindowsCE论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

10
 
引用 8 楼 zzqccc 的回复:
引用 4 楼 daigua04 的回复:
预览可以,保存图像就不行,那只可能是保存图像过程中,数据出现问题了!如上楼所说,如果是YUV,需要转换为RGB,然后再存入BMP的。我现在就是这样做的,因为如果我直接使用RGB格式,预览和拍照都是花屏!


还有没有一种可能的现象是,当影像的尺寸大小和拍下来的图像大小不一样的时候,也同样会花屏。我发现显示的影像大小不是320X240,右边有空出一块区域放按钮,而拍下来的照片大小是完全的320X240,我有试过更改影像的显示大小,发现改过后显示的影像也花屏了。



是的,是有这个可能,源图像和预览图像设置不正确也会导致花屏,我遇到过
此帖出自WindowsCE论坛
 
 
 

回复

49

帖子

0

TA的资源

一粒金砂(初级)

11
 
大家好,我用的S3C6400的开发板,使用MT9M112的摄像头模组,在开发板上很清楚,但是在自己设计的PCB板上,图像一直有闪屏的现象,在preview时。

停止preview时,画面静止,画面非常清晰和完好,但是一旦开始preview,画面就会有闪屏的现象。

我的视频信号经过  视频板---主板---cpu板,到达S3C6400,不知道是布线没布好,还是sensor的寄存器没设置好的原因,请高手给我解答,谢谢。

我的QQ  23806674  ,手机 13541260419 ,欢迎来电来函,QQ留言。本人平时上班的时候上不了网。
此帖出自WindowsCE论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表