linux_C语言_YUV420转RGB888和文件读取判断是否读到末尾的源码
附上源码
int main(int argc, const char **argv)
{
//获取文件的字节大小
struct stat buf;
int fd;
fd = open("img_320x240.yuv", O_RDONLY);
fstat(fd, &buf);
printf("img_320x240.yuv file size =%d\n ", buf.st_size);
close(fd);
//1、打开yuv文件和rgb文件
FILE *fp1 = fopen("img_320x240.yuv", "r");
if(fp1 == NULL)
{
perror("fopen 1.txt failed!");
return -1;
}
FILE *fp2 = fopen("img_320x240hehe.rgb", "w");
if(fp2 == NULL)
{
perror("fopen failed!");
return -1;
}
unsigned char buf_yuv[buf.st_size];//存放yuv的buf
unsigned char buf_rgb[buf.st_size*2];//存放RGB数据buf
long flag1, flag2;
int i=0;
while(1)
{
//读取数据之前先记录文件位置指针的位置
flag1 = ftell(fp1);
//2、读取1.txt文件里面的数据
int ret = fread(buf_yuv+36*i, 12, 3, fp1);
i++;
if(ret < 3)
{
if(feof(fp1)) //达到文件末尾位置
{
printf("fread finshed!\n");
break;
}
if(ferror(fp1)) //读取数据时出错
{
perror("fread failed!");
break;
}
}
}
int ret;
ret=IYUV_to_RGB24(buf_yuv,buf_rgb,320,240);
if(ret==false){
printf("yuv_to_RGB fail\n");
}
fwrite(buf_rgb,buf.st_size*2,1,fp2);
//4、关闭文件
fclose(fp1);
fclose(fp2);
return 0;
}