|
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 编辑 ]
|
|