多维数组与一维数组的转化

5 篇文章 0 订阅
2 篇文章 0 订阅

多维数组和一维数组之间可以通过强制类型转化达到互相访问的目的

具体的转化规则可参考https://www.cnblogs.com/chenyangyao/p/5222696.html

例如

/*
int show_bmp(char *bmp_name,int lcd_fd)
{
	int bmp_fd=open(bmp_name,O_RDWR);
	int bmp_xmax,bmp_ymax;
	if(bmp_fd<0)
	{
		perror("open bmp failed");
		return -1;
	}
	char bmp_head[54];
	read(bmp_fd,bmp_head,54);
	bmp_xmax=bmp_head[0x12]|bmp_head[0x13]<<8|bmp_head[0x14]<<16|bmp_head[0x15]<<24;//宽
	bmp_ymax=bmp_head[0x16]|bmp_head[0x17]<<8|bmp_head[0x18]<<16|bmp_head[0x19]<<24;//高
	printf("bmp_xmax:%d,bmp_ymax:%d\r\n",bmp_xmax,bmp_ymax);
	lseek(bmp_fd,54,SEEK_SET);
	//read picture
	char bmp_buf[bmp_ymax*bmp_xmax*3],(*pbmp_buf)[bmp_xmax][3]=(char (*)[bmp_xmax][3])bmp_buf;//在C99中新加入了对变长数组的支持,也就是说数组的长度可以由变量来定义。
	read(bmp_fd,bmp_buf,bmp_xmax*bmp_ymax*3);

	int buf[bmp_ymax*bmp_xmax],(*pbuf)[bmp_xmax]=(int (*)[bmp_xmax])buf;//图片反转
	int i,j;
	for(i=0;i<bmp_ymax;i++)//将rgb合成一个像素点
	{
		for(j=0;j<bmp_xmax;j++)//按照先高后行的顺序排列
			pbuf[i][j]=pbmp_buf[i][j][0]|pbmp_buf[i][j][1]<<8|pbmp_buf[i][j][2]<<16;
			//buf[i*480+j]=bmp_buf[i*bmp_xmax*3+j*3+0]|bmp_buf[i*bmp_xmax*3+j*3+1]<<8|bmp_buf[i*bmp_xmax*3+j*3+2]<<16
	}
	printf("buf[0][0]:%d,(int *)buf[0]:%d\r\n",pbuf[0][0],((int *)buf)[0]);
	int lcd_buf[LCD_YMAX][LCD_XMAX];
	//float factor_y=bmp_ymax/LCD_YMAX;
	//float factor_x=bmp_xmax/LCD_XMAX;
	for(i=0;i<LCD_YMAX;i++)//缩放,将图片铺满屏
	{
		for(j=0;j<LCD_XMAX;j++)
			lcd_buf[i][j]=pbuf[i*bmp_ymax/LCD_YMAX][j*bmp_xmax/LCD_XMAX];
	}
	int x,y;
	int spi_buf[480*272];
	for(y=0;y<272;y++)
	{
		for(x=0;x<480;x++)
		{
			spi_buf[y*480+x]=lcd_buf[271-y][x];
		}
	}
	lseek(lcd_fd,0,SEEK_SET);
	write(lcd_fd,spi_buf,480*272*4);
	close(bmp_fd);
	return 1;
}*/
/*
int show_bmp(char *bmp_name,int lcd_fd)
{
	int bmp_fd=open(bmp_name,O_RDWR);
	int bmp_xmax,bmp_ymax;
	if(bmp_fd<0)
	{
		perror("open bmp failed");
		return -1;
	}
	char bmp_head[54];
	read(bmp_fd,bmp_head,54);
	bmp_xmax=bmp_head[0x12]|bmp_head[0x13]<<8|bmp_head[0x14]<<16|bmp_head[0x15]<<24;//宽
	bmp_ymax=bmp_head[0x16]|bmp_head[0x17]<<8|bmp_head[0x18]<<16|bmp_head[0x19]<<24;//高
	printf("bmp_xmax:%d,bmp_ymax:%d\r\n",bmp_xmax,bmp_ymax);
	lseek(bmp_fd,54,SEEK_SET);
	//read picture
	char bmp_buf[bmp_ymax][bmp_xmax][3];//在C99中新加入了对变长数组的支持,也就是说数组的长度可以由变量来定义。
	read(bmp_fd,bmp_buf,bmp_xmax*bmp_ymax*3);

	int buf[bmp_ymax][bmp_xmax];//图片反转
	int i,j;
	for(i=0;i<bmp_ymax;i++)//将rgb合成一个像素点
	{
		for(j=0;j<bmp_xmax;j++)//按照先高后行的顺序排列
			buf[i][j]=bmp_buf[i][j][0]|bmp_buf[i][j][1]<<8|bmp_buf[i][j][2]<<16;
			//buf[i*480+j]=bmp_buf[i*bmp_xmax*3+j*3+0]|bmp_buf[i*bmp_xmax*3+j*3+1]<<8|bmp_buf[i*bmp_xmax*3+j*3+2]<<16
	}
	printf("buf[0][0]:%d,(int *)buf[0]:%d\r\n",buf[0][0],((int *)buf)[0]);
	int lcd_buf[LCD_YMAX][LCD_XMAX];
	//float factor_y=bmp_ymax/LCD_YMAX;
	//float factor_x=bmp_xmax/LCD_XMAX;
	for(i=0;i<LCD_YMAX;i++)//缩放,将图片铺满屏
	{
		for(j=0;j<LCD_XMAX;j++)
			lcd_buf[i][j]=buf[i*bmp_ymax/LCD_YMAX][j*bmp_xmax/LCD_XMAX];
	}
	int x,y;
	int spi_buf[480*272];
	for(y=0;y<272;y++)
	{
		for(x=0;x<480;x++)
		{
			spi_buf[y*480+x]=lcd_buf[271-y][x];
		}
	}
	lseek(lcd_fd,0,SEEK_SET);
	write(lcd_fd,spi_buf,480*272*4);
	close(bmp_fd);
	return 1;
}
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值