天嵌 ARM开发社区

 找回密码
 注册
查看: 3196|回复: 8

ov9650保存图片问题

[复制链接]
vincent_witium 发表于 2009-12-21 15:19:17 | 显示全部楼层 |阅读模式
用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);
        }
 楼主| vincent_witium 发表于 2009-12-21 15:51:20 | 显示全部楼层
自己顶一下,期待大家的帮忙。
 楼主| vincent_witium 发表于 2009-12-21 17:39:20 | 显示全部楼层
大家都来看看啊,是不是
DeviceIoControl(hCam,CAM_IOCTL_GET_LATEST_FRAME,NULL,NULL,Buffer,NULL,NULL,NULL);
除了问题啊
 楼主| vincent_witium 发表于 2009-12-22 10:23:01 | 显示全部楼层
顶一下,版主干净帮忙啊
亚瑟王 发表于 2009-12-22 17:35:03 | 显示全部楼层
bmp图片的头是否写成功了?
raycmort 发表于 2010-7-12 16:45:18 | 显示全部楼层
我想是
DeviceIoControl(hCam,CAM_IOCTL_GET_LATEST_FRAME,NULL,NULL,Buffer,NULL,NULL,NULL);
中的Buffer后面紧接的NULL(规定Buffer返回的字节数)没有设置(应该是320*240*2吧)。
所以没有数据返回。
raycmort 发表于 2010-7-20 11:30:38 | 显示全部楼层
若保存为单色的bmp,它的存放格式是,54字节(每字节8bit)文件头 + 8字节的颜色表(0,0,0,0,255,255,255,0),接下来就是数据部分了。它是每个字节表示8个像素的内容(即每个像素占1bit,0为黑色,1为白色),
那么我想请问能否 通过判断Y的值(Y是C-path的YCbCr中的Y) 来决定对应的象素是0,还是1呢?(比如,352*288的图片的第一个Y的值是67,那么它比255/2=127小,因此对应的bmp的第一bit就为0)
或者还是它的对应关系不是Y1对应bmp的第一bit,那应该是那个bit呢?
丹小若 发表于 2012-5-26 17:12:46 | 显示全部楼层
楼主解决了没有啊~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-5-19 07:47 , Processed in 1.062500 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表