集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 4088|回复: 6

DE0+D5M采集的像素数据(RGB)转bmp格式

[复制链接]
WPZAC 发表于 2010-8-14 10:03:48 | 显示全部楼层 |阅读模式


这个是用摄像头采集的数据RGB格式,打包为bmp之后存储到sd卡,可是却出现了这样的问题,请大家帮忙看看是什么原因造成的?谢谢!!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
canic 发表于 2010-8-14 17:18:49 | 显示全部楼层
以前有研究過D5M,但沒有碰到類似現象,我猜是你的RGB轉換有問題,你可以把程序貼出來
 楼主| WPZAC 发表于 2010-8-16 11:46:15 | 显示全部楼层
问题搞定。。。。。
zhuhuan0000 发表于 2010-8-18 10:55:03 | 显示全部楼层
同学,见到你搞定了bmp,可不可以发个案例过来参考哈!我QQ:1244673032
 楼主| WPZAC 发表于 2010-8-19 08:26:11 | 显示全部楼层
回复 4# zhuhuan0000


   
#define BMP_NAME    "/mnt/host/capture.bmp"
#define DATA_OFFSET 54
alt_u8 header[54] = {
  0x42,        // identity : B
  0x4d,        // identity : M
  0, 0, 0, 0,  // file size
  0, 0,        // reserved1
  0, 0,        // reserved2
  54, 0, 0, 0, // RGB data offset
  40, 0, 0, 0, // struct BITMAPINFOHEADER size
  0, 0, 0, 0,  // bmp width
  0, 0, 0, 0,  // bmp height
  1, 0,        // planes
  24, 0,       // bit per pixel
  0, 0, 0, 0,  // compression
  0, 0, 0, 0,  // data size
  0, 0, 0, 0,  // h resolution
  0, 0, 0, 0,  // v resolution
  0, 0, 0, 0,  // used colors
  0, 0, 0, 0   // important colors
};

alt_u16 WIDTH = 800;
alt_u16 HEIGHT = 400;

int main() {
  int i, j;

  alt_u8  image[960000];  // image array 800 * 400 * 3 = 960000

  alt_u16 file_size;      // file size
  FILE    *fp = NULL;     // file pointer for bmp file to write
  alt_u32 data;
  alt_u16 read_data1;
  alt_u16 read_data2;
  alt_u8  r, g, b;
  
  CMOS_CAPTURE_START(CMOS0_BASE);
  usleep(1000 * 1000 * 10);
  CMOS_CAPTURE_STOP(CMOS0_BASE);
  
  for(j = 0; j < HEIGHT; j++) {
    for(i = 0; i < WIDTH; i++) {
      data = CMOS_READ(CMOS0_BASE);
      
      read_data1 = data & 0x0000ffff;
      read_data2 = ((data & 0xffff0000) >> 16);
      
      r = ((read_data2 & 0x03fc) >> 2);
      g = ((read_data1 & 0x7c00) >> 7) + ((read_data2 & 0x7000) >> 12);
      b = ((read_data1 & 0x03fc) >> 2);
      
      *(image + 3 * (WIDTH * j + i) + 0) = b;  // B
      *(image + 3 * (WIDTH * j + i) + 1) = g;  // G
      *(image + 3 * (WIDTH * j + i) + 2) = r;  // R
    }
  }
  
  // file size  
  file_size = WIDTH * HEIGHT * 3 + DATA_OFFSET;
  header[2] = (alt_u8)(file_size & 0x000000ff);
  header[3] = (file_size >> 8 ) & 0x000000ff;
  header[4] = (file_size >> 16) & 0x000000ff;
  header[5] = (file_size >> 24) & 0x000000ff;
  
  // width
  header[18] = WIDTH            & 0x000000ff;
  header[19] = (WIDTH    >> 8 ) & 0x000000ff;
  header[20] = (WIDTH    >> 16) & 0x000000ff;
  header[21] = (WIDTH    >> 24) & 0x000000ff;
  
  // height
  header[22] = HEIGHT           & 0x000000ff;
  header[23] = (HEIGHT   >> 8 ) & 0x000000ff;
  header[24] = (HEIGHT   >> 16) & 0x000000ff;
  header[25] = (HEIGHT   >> 24) & 0x000000ff;
  
  RGB打包为BMP代码
zhuhuan0000 发表于 2010-8-19 10:54:26 | 显示全部楼层
你QQ多少,有很多问题想请教你,
fpga_feixiang 发表于 2021-10-12 12:48:52 | 显示全部楼层
66666666666666666666
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|集成电路技术分享 ( 京ICP备20003123号-1 )

GMT+8, 2024-5-17 14:10 , Processed in 0.073759 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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