为公司的pcie接口FPGA板卡编写上位机软件——源文件分析2——BMP文件的读入和写回

本文介绍了如何为公司的PCIe接口FPGA板卡编写上位机软件,以实现BMP图像的读取和写回。通过分离示例代码,实现了读取和写入文件的功能,核心在于read_image_file和read_image_file_bmp两个函数,旨在完成图像的简单编辑操作。
摘要由CSDN通过智能技术生成

由于同事未能准备好硬件,所以计划先做一个实验——将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;                  //统计图片总数
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值