多维数组与一维数组的转化
多维数组和一维数组之间可以通过强制类型转化达到互相访问的目的
具体的转化规则可参考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;
}
*/