由于同事未能准备好硬件,所以计划先做一个实验——将bmp文件读入到内存,稍作修改后,写回到文件,这样就基本完成了画框的工作,相当于分两步走。
从示例代码中剥离出了bmp文件的读入和写回代码,经过测试可以进行文件的读取和写入。接着上文的代码分析。
int main(int argc, char* argv[])
{
put_pic_to_sys_memory("./image/");
get_align_mem();
save_image();
printf("FInished!\n");
}
static void put_pic_to_sys_memory(char *path)
{
int pic_num;
int i,j;
//FILE * fp;
char im_f[128];
static ImageData image; //自定义的一个结构体,用以描述图片,包含成员像素阵列(数据的起始位置)、高、宽、BPP像素格式(一个像素由几个位描述)
pic_num = get_pic_num(path); //从路径中得到图片的总数,文件操作相关函数,暂时不去深究
if(pic_num == 0) //如果没有发现图片
{
printf("no pic \n");
exit(0);
}
pic_num -= 2; //如果有图片,则图片数减2,为什么?暂时不去管
sprintf(im_f,"%s",path); //格式化文件名
if(path[strlen(path)-1] == '/')//在im_f中写入path/1.bmp
strcat(im_f,"1.bmp");
else
strcat(im_f,"/1.bmp");
if(!read_image_file(im_f,&image))//读取图像文件,并获取属性*************
{
printf("%s open file error\n",__func__);
exit(0);
}
video_width = image.width; //如果读取成功,则获取图像的宽、高等属性
video_height = image.height;
clear_image_data(&image); //获取完之后,即刻清楚,为下一幅图片读取做准备
//TODO check system memory is enough or not 测试系统内存是否足够
image_list = malloc(sizeof(ImageData)*pic_num); 分配总图片数的内存
image_list_out = malloc(sizeof(ImageData)*pic_num);
printf("pic_num is %d\n",pic_num);
for(i=0;i<pic_num;i++)
{
j = strlen(im_f)-1;
while(im_f[j] != '/')j--;
j+=1;
sprintf(im_f+j,"%d.bmp",i+1);
read_image_file(im_f,&image_list[i]);
read_image_file(im_f,&image_list_out[i]); //此处是否应该为write_image_file?
}
FILE *fp = fopen("t1.data","wb"); //打开一个文件
if(NULL==fp)
{
printf("open file error\n");
fclose(fp);
exit(0);
}
fwrite(image_list[0].pixelArray,video_height*video_width*3,1,fp); //向文件中写入数据
fclose(fp); //关闭文件
printf("read %d frames ok\n",pic_num); //读取图片完毕
total_frame = pic_num; //统计图片总数
}