RGB、YUV、NV21、BMP相互转换 您所在的位置:网站首页 播放图片名称 RGB、YUV、NV21、BMP相互转换

RGB、YUV、NV21、BMP相互转换

#RGB、YUV、NV21、BMP相互转换| 来源: 网络整理| 查看: 265

概述

最近学习雷神的博客,深受启发。后面的代码或者借鉴原作的代码,或者修改自原作。一般的图片播放器无法显示rgb和yuv格式的图片,为了方便查看rgb和yuv图片,雷神修改了一个网上的YUV/RGB播放器,既支持YUV又支持RGB的播放器。不过要求图片名字类似于test_320x420.yuv,320x420是图片的宽和高。

rgb24转yuv420p

首先要了解rgb24和yuv420p的存储方式,yuv420p是先存y再存u最后是v分量。废话少说,直接上代码。

#include #include #include #include unsigned char clip_value(unsigned char x,unsigned char min_val,unsigned char max_val){ if(x>max_val){ return max_val; }else if(x> 8) + 128 ; v = (unsigned char)( ( 112 * r - 94 * g - 18 * b + 128) >> 8) + 128 ; *(ptrY++) = clip_value(y,0,255); if (j%2==0&&i%2 ==0){ *(ptrU++) =clip_value(u,0,255); } else{ if (i%2==0){ *(ptrV++) =clip_value(v,0,255); } } } } return true; } int simplest_rgb24_to_yuv420(const char *url_in, int w, int h,int num,const char *url_out){ FILE *fp=fopen(url_in,"rb+"); FILE *fp1=fopen(url_out,"wb+"); unsigned char *pic_rgb24=(unsigned char *)malloc(w*h*3); unsigned char *pic_yuv420=(unsigned char *)malloc(w*h*3/2); for(int i=0;i=0;j--){ ptr_bmp = bmpBuf+54+ w*j*3 ; for (i = 0;imax_val){ return max_val; }else if(x> 8) + 128 ; v = (unsigned char)( ( 112 * r - 94 * g - 18 * b + 128) >> 8) + 128 ; *(ptrY++) = clip_value(y,0,255); if (j%2==0&&i%2 ==0){ *(ptrV++) =clip_value(v,0,255);ptrV++; } else{ if (i%2==0){ *(ptrU++) =clip_value(u,0,255);ptrU++; } } } } return 0; } int simplest_rgb24_to_yuv420(const char *url_in, int w, int h,int num,const char *url_out){ FILE *fp=fopen(url_in,"rb+"); FILE *fp1=fopen(url_out,"wb+"); unsigned char *pic_rgb24=(unsigned char *)malloc(w*h*3); unsigned char *pic_yuv420=(unsigned char *)malloc(w*(h-1)*3/2); fread(pic_rgb24,1,w*h*3,fp); RGB24_TO_YUV420(pic_rgb24,w,h,pic_yuv420); fwrite(pic_yuv420,1,w*(h-1)*3/2,fp1); free(pic_rgb24); free(pic_yuv420); fclose(fp); fclose(fp1); return 0; } int main(){ //Test simplest_rgb24_to_yuv420("./pic_rgb/8_1024x683.rgb",1024,683,1,"./8_1024x682.yuv"); return 0; }

开始在做图像格式转换时,只有雷神的一张lena的rgb图,网上搜了许久也没找到,就用libjpeg库将网上下载的jpg图像转为bmp,然后又将bmp利用上面的代码转为rgb。事实上,libjpeg库包含将jpg解压为rgb的方法,只不过转过来是错的!所以我只能先转bmp然后再转rgb。转换过程,下一篇再介绍,下面是我把100张jpg图片转成的rgb格式图片的链接。图片命名为类似1_500x352.rgb,序号_图片宽x图片高.jpg。上面代码中用到的rgb格式图片选自该文件夹。 rgb图片下载链接: link. 参考博客: 播放器链接: link.

雷神链接: link.



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有