6963|7

91

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

stm32用摄像头拍照存储成为bmp格式不正确 [复制链接]

求帮助。。。。上图先,昨天晚上太急着走了,我是这样子的一个工作的过程,stm32驱动ov7670摄像头,出来的数据是RGB565的数据,直接送到LCD显示,有按键按下的时候就拍下照片,存储成为bmp格式的图像。我的摄像头出来的数据是: 从右上角往下一列的数据这样排列到最左边最下角是最后一个数据。,还有就是想问问 我16位的数据不用调色板可以不???部分程序:
if(KeyNum == 1)   //第一个按键按下,表示拍一张照片
   {
  if(Bmp_Num == 256) Bmp_Num=0;
  Bmp_Num++;    //照片的名字加1
  //printf("/IMG%4.4d.BMP", id_no);
  f_mount(0, &fs);
  sprintf(m_FileName, "/IMG%4.4d.BMP", Bmp_Num);  //把BMP格式的名字放在m_FileName数组中
  res = f_open(&fsrc, m_FileName, FA_CREATE_ALWAYS | FA_WRITE); //创建一个BMP图片文件
  if (res != FR_OK)
  {
   printf("\r\n创建文件失败!");
   return FALSE;
  }
           /**********************文件头*****************************/
      bmfh.bfType = 0x4D42;  //"BM"是4d42-----------问题解决---------------------
   bmfh.bfReserved1 = 0;  //保留字
   bmfh.bfReserved2 = 0;  //保留字
   bmfh.bfOffBits = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);  //文件头到图像数据的字节偏移量
   bmfh.bfSize = bmfh.bfOffBits + IMG_WIDTH*IMG_HEIGHT*2;//说明位图的大小
    /**********************文件头*****************************/
    /**********************信息头*****************************/
   bmi.biSize = sizeof(BITMAPINFOHEADER);  //=40
   bmi.biWidth = IMG_WIDTH;
   bmi.biHeight = IMG_HEIGHT; //高度是正的,所以解码的时候要注意是从左下角开始解码
   bmi.biPlanes = 1;
   bmi.biBitCount = 16;
   bmi.biCompression = 0;     //不压缩的位图
   bmi.biSizeImage = 0;
   bmi.biXPelsPerMeter = 0x1000;
   bmi.biYPelsPerMeter = 0x1000;
      bmi.biClrUsed = 0;
      bmi.biClrImportant = 0;
   /**********************信息头*****************************/
   
  // clmap[0] = 0xF800;     //定义调色板
  //  clmap[1] = 0x07E0;
  // clmap[2] = 0x001F;
   
   filesize = 0;
   res |= f_write(&fsrc, &bmfh, sizeof(BITMAPFILEHEADER), &bytewr); //写bmp格式的文件头
   filesize += bytewr;
   res |= f_write(&fsrc, &bmi, sizeof(BITMAPINFOHEADER), &bytewr);  //写bmp格式文件的信息头
   filesize += bytewr;
  // res |= f_write(&fsrc, &clmap, 12, &bytewr);  //定义调色板的函数
  // filesize += bytewr;
  
      FIFO_RRST_L();
      FIFO_RD_L();
      FIFO_RD_H();
      FIFO_RD_L();
      FIFO_RRST_H();
      FIFO_RD_H();
    for(y=0; y     {  
     for(x=0; x      {
      FIFO_RD_L();
      buffer_c[0]=(GPIOA->IDR)&0xff; //读高位,
      //c_data = c_data<<8;
      FIFO_RD_H();
               FIFO_RD_L();
               buffer_c[1]=(GPIOA->IDR)&0xff;//读低位
               FIFO_RD_H();
      res = f_write(&fsrc, buffer_c, 2, &bytewr);   //小端模式
     }
    }
  f_close(&fsrc);   
        f_mount(0, NULL);

  }//end key_Num;

[ 本帖最后由 qinsong 于 2013-1-18 09:40 编辑 ]

IMG0001.jpg (50.39 KB, 下载次数: 1)

IMG0001.jpg

IMG0001.BMP (150.05 KB, 下载次数: 0)

IMG0001.BMP
此帖出自stm32/stm8论坛

最新回复

不懂,帮顶。我也想做图像采集  详情 回复 发表于 2015-4-1 23:10
点赞 关注
 

回复
举报

1027

帖子

0

TA的资源

五彩晶圆(中级)

沙发
 
是从LCD中读取并保存的吧?
读取出来的数据 要转换下 再存的。
此帖出自stm32/stm8论坛
 
 

回复

91

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
解决不了的啊
此帖出自stm32/stm8论坛
 
 

回复

91

帖子

0

TA的资源

一粒金砂(中级)

4
 
有谁知道不?指点下子啦
此帖出自stm32/stm8论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(中级)

5
 
您能把您这个项目的代码发一份给我吗?或者我向您买一份,我也在做类似项目,很多东西不熟悉。。麻烦谢谢了397402680@qq.com
此帖出自stm32/stm8论坛
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

6
 
各自徘徊的
此帖出自stm32/stm8论坛
 
 
 

回复

20

帖子

0

TA的资源

一粒金砂(初级)

7
 

读取出来的数据 要转换下 再存的。
此帖出自stm32/stm8论坛
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(中级)

8
 
不懂,帮顶。我也想做图像采集
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

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
快速回复 返回顶部 返回列表