CN102073987A - 一种yuv420图像转换成rgb565图像的方法和系统 - Google Patents
一种yuv420图像转换成rgb565图像的方法和系统 Download PDFInfo
- Publication number
- CN102073987A CN102073987A CN201010616187XA CN201010616187A CN102073987A CN 102073987 A CN102073987 A CN 102073987A CN 201010616187X A CN201010616187X A CN 201010616187XA CN 201010616187 A CN201010616187 A CN 201010616187A CN 102073987 A CN102073987 A CN 102073987A
- Authority
- CN
- China
- Prior art keywords
- component
- convergent
- divergent
- yuv420
- image
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Abstract
本发明公开一种YUV420图像转换成RGB565图像的方法和系统,通过把原始YUV420图像等分为原始YUV420图像块并进行缩放,获取缩放后的YUV420图像块的U分量和V分量,计算rgb值,根据YUV420图像的尺寸与移动终端屏幕尺寸确定是否旋转分别将rgb值写入目标地址,从而实现对每个原始YUV420图像块连续做缩放、计算rgb值并输出(含旋转),减少了循环的次数和访问内存的数量,提高了转换效率,输出的RGB565图像可以在不同像素的移动终端显示,通过把原始YUV420图像等分为不同等分比例的原始YUV420图像块和不同的缩放比例,达到最佳的显示效果,加速内存访问速度。
Description
技术领域
本发明涉及视频播放领域,尤其涉及一种YUV420图像转换成RGB565图像的方法和系统。
背景技术
现有技术中视频解码器直接解码生成的YUV420图像文件在许多移动终端中是不能直接显示的,必须经过YUV420转换成RGB565才能显示,另外,许多的移动终端屏幕像素与视频图像的尺寸不一致,导致移动终端在显示RGB565时会出现很多空白区域,降低了用户的体验效果,例如视频图像的尺寸的像素为240x180,而移动终端屏幕为240x320,那么导致移动终端在显示RGB565格式的视频文件时会在上、下两端出现很多空白区域,这就需要在移动终端显示视频之前做缩放、旋转、颜色转换(即计算rgb值)的操作步骤,因YUV420图像在做缩放、旋转和颜色转换时,每个操作步骤都需要经过2次循环,这样累计下来的循环次数比较多,而且每步的循环都需要重新访问内存,效率低,以像素为240x180YUV420图像转换成像素为320x240RGB565图像为例,通常需要320*240*5/4=115200字节内存。
发明内容
本发明实施例的目的在于提出一种YUV420图像转换成RGB565图像的方法,旨在解决现有技术中视频解码器直接解码生成的YUV420图像文件在许多移动终端中是不能直接显示的,必须经过YUV420图像转换成RGB565图像,而且直接转换成RGB565图像后在移动终端显示时会有空白区域,降低了用户的体验效果,必须在YUV420图像转换成RGB565图像之前做缩放、旋转、颜色转换(即计算rgb值)的操作步骤,因YUV420图像在做缩放、旋转和颜色转换时,每个操作步骤都需要经过2次循环,这样累计下来的循环次数较多,访问内存量增加,资源浪费,且效率低。
本发明实施例是这样实现的,一种YUV420图像转换成RGB565图像的方法,包括以下步骤:
将原始的YUV420图像等分为一个或一个以上的原始YUV420图像块;预置原始YUV420图像水平和垂直方向的缩放倍数;
根据所述预置原始YUV420图像水平和垂直方向的缩放倍数,插值滤波生成缩放后的YUV420图像块;
获取缩放后的YUV420图像块的Y分量、U分量和V分量,计算rgb值,根据缩放后的YUV420图像的尺寸与移动终端屏幕尺寸,确定是否旋转并分别将rgb值写入目标地址。
本发明实施例的另一目的在于提出一种YUV420图像转换成RGB565图像的系统,所述系统包括:
初始模块,与缩放模块相连,用于将原始的YUV420图像等分为一个或一个以上的原始YUV420图像块;预置原始YUV420图像水平和垂直方向的缩放倍数;
缩放模块,与初始模块和输出模块相连,用于根据所述预置原始YUV420图像水平和垂直方向的缩放倍数,插值滤波生成缩放后的YUV420图像块;
输出模块,与缩放模块相连,用于获取缩放后的YUV420图像块的Y分量、U分量和V分量,计算rgb值,根据缩放后的YUV420图像的尺寸与移动终端屏幕尺寸,确定是否旋转并分别将rgb值写入目标地址。
本发明的有益效果:
通过把原始YUV420图像等分为原始YUV420图像块,对原始YUV420图像块进行缩放,获取YUV420图像块的Y分量、U分量和V分量,计算rgb值(即颜色转换),根据YUV420图像的尺寸与移动终端屏幕尺寸确定是否旋转分别把rgb值写入目标地址,从而实现对每个原始YUV420图像块连续做缩放、计算rgb值并输出,减少了循环的次数和访问内存的数量,提高了转换效率,输出的RGB565图像可以在不同像素的移动终端显示,通过把原始YUV420图像等分为不同等分比例的原始YUV420图像块和不同的缩放比例,达到最佳的显示效果,减少内存使用量,同时保持数据的局部性,加速内存访问速度。
附图说明
图1为本发明实施例中原始YUV420图像的结构图;
图2为图1中的原始YUV420图像块A缩放后的YUV420图像块的结构图;
图3为图2中缩放后的YUV420图像块的前两个像素包含的4个Y分量、1个U分量和1个V分量的结构图;
图4为图3中YUV420对应的RGB565图像块旋转输出的目标位置的结构图;
图5为图3中YUV420对应的RGB565图像块非旋转输出目标位置的结构图;
图6为本发明实施例的一种YUV420图像转换成RGB565图像方法的总体流程图;
图7为本发明实施例的一种YUV420图像转换成RGB565图像方法的具体流程图;
图8为本发明实施例的一种YUV420图像转换成RGB565图像系统的总体结构图;
图9为本发明实施例的一种YUV420图像转换成RGB565图像系统的具体结构图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图和实施例,对本发明进行进一步详细说明,为了便于说明,仅示出了与本发明实施例相关的部分。应当理解,此处所描写的具体实施例,仅仅用于解释本发明,并不用以限制本发明。
本发明通过把原始YUV420图像等分为原始YUV420图像块,对原始YUV420图像块进行缩放,获取YUV420图像块的Y分量、U分量和V分量,计算rgb值(即颜色转换),根据YUV420图像的尺寸与移动终端屏幕尺寸确定是否旋转并分别将rgb值写入目标地址,从而实现对每个原始YUV420图像块连续做缩放、计算rgb值并输出(包括旋转),减少了循环的次数和访问内存的数量,提高了转换效率,输出的RGB565图像可以在不同像素的移动终端显示,通过把原始YUV420图像等分为不同等分比例的原始YUV420图像块和不同的缩放比例,达到最佳的显示效果,减少内存使用量,同时保持数据的局部性,加速内存访问速度。
实施例一
图6是本发明实施例一种YUV420图像转换成RGB565图像方法的总体流程图。所述方法包括以下步骤:
S601,将原始的YUV420图像等分为一个或一个以上的原始YUV420图像块;预置原始YUV420图像水平和垂直方向的缩放倍数;
所述的YUV420图像的水平和垂直方向缩放倍数Fx=Ns_x/Ds_x,Fy=Ns_y/Ds_y,其中Ns_x和Ds_x、Ns_y和Ds_y的取值满足条件:成缩放倍数关系,且为正整数,同时,(2*Ds_x)*(Ns_x/Ds_x)等于缩放后的YUV420图像块的宽度tx,(2*Ds_y)*(Ns_y/Ds_y)等于缩放后的YUV420图像块的高度ty。基于缩放倍数和需要缩放呈现的效果把YUV420图像分成一个或一个以上YUV420图像块,每个YUV420图像块由像素组成;
为便于理解,以放大2倍为例说明,如图1所示为原始YUV420图像,原始YUV420图像的高度和宽度分别为H、W,原始YUV420图像分成一个以上原始YUV420图像块,如图1中的原始YUV420图像块A、B、C,预置每个原始YUV420图像块的像素为4x4,即原始YUV420图像块的高度和宽度都为4,每个图像块都为一个Y分量Ys,其中4个Y分量对应1个U分量Us和一个V分量Vs;预置Ns_x=4,Ds_x=2,Ns_y=4,Ds_y=2,Fx和Fy都为2;
S602,根据所述预置原始YUV420图像水平和垂直方向的缩放倍数,插值滤波生成缩放后的YUV420图像块;
所述的插值滤波,例如把4个点的图像变成8个点的图像,那么每个点如何取值变成8个点效果最佳的过程叫插值滤波;
为便于理解,以放大2倍为例说明,图2所示为原始YUV420图像块A,把原始YUV420图像块A放大2倍后像素为8x8,如图2所示,包括Y分量1-64,其中缩放后的图像块的宽度为tx,缩放后的图像块的高度ty;
S603,获取缩放后的YUV420图像块的Y分量、U分量和V分量,计算rgb值,根据缩放后的YUV420图像的尺寸与移动终端屏幕尺寸,确定是否旋转并分别将rgb值写入目标地址;
如果旋转,则RGB565图像的宽度等于原始YUV420图像块的高度,缩放后的YUV420图像的高度成为RGB565图像的宽度;
所述的rgb值是通过外部函数做颜色转换的值,所述的外部函数为get_rgb16_value_clip_rgb()。
本实施例中通过把原始YUV420图像等分为一个或一个以上的原始YUV420图像块,对原始YUV420图像块进行缩放,获取YUV420图像块的Y分量、U分量和V分量,计算rgb值(即计算rgb值),根据YUV420图像的尺寸与移动终端屏幕尺寸确定是否旋转分别将rgb值写入目标地址,从而实现对每个原始YUV420图像块连续做缩放、计算rgb值并输出(包括旋转),减少了循环的次数和访问内存的数量,提高了转换效率,输出的RGB565图像可以在不同像素的移动终端显示,通过把原始YUV420图像等分为不同等分比例的原始YUV420图像块和不同的缩放比例,达到最佳的显示效果,减少内存使用量,同时保持数据的局部性,加速内存访问速度。
实施例二
图7是本发明实施例一种YUV420图像转换成RGB565图像方法的具体流程图。所述方法包括以下步骤:
S701,预置原始YUV420图像的Y、U、V分量,原始YUV420图像等分为一个或一个以上的YUV420图像块;预置YUV420图像的水平方向缩放倍数Fx和垂直方向缩放倍数Fy;预置RGB565图像的目标地址首地址指针rgb和当前RGB565图像块存放的目标地址的指针p,都定义成short*类型;预置缩放缓冲区,用于存放缩放后的YUV420图像块的Y分量、U分量和V分量,分别由变量Yt、Ut和Vt引用;预置循环变量x、y、x1、y1、i、j,初始为0;预置RGB565图像块输出坐标变量x2、y2;
所述的YUV420图像的水平和垂直方向缩放倍数Fx=Ns_x/Ds_x,Fy=Ns_y/Ds_y,其中Ns_x和Ds_x、Ns_y和Ds_y的取值满足条件:成缩放倍数关系,且为正整数,同时,(2*Ds_x)*(Ns_x/Ds_x)等于缩放后的YUV420图像块的宽度tx,(2*Ds_y)*(Ns_y/Ds_y)等于缩放后的YUV420图像块的高度ty。基于缩放倍数和需要缩放呈现的效果把YUV420图像分成一个或一个以上的YUV420图像块;
所述的首地址指针rgb记录RGB565图像块需要存放的目标地址的首地址,所述的当前RGB565图像块存放的目标地址的指针p记录当前RGB565图像块存放的目标地址;
为便于理解,以放大2倍为例说明,如图1所示为原始YUV420图像,原始YUV420图像的高度和宽度分别为H、W,原始YUV420图像分成一个以上的原始YUV420图像块,如图1中的原始YUV420图像块A、B、C,预置每个原始YUV420图像块的像素为4x4,即原始YUV420图像块的高度和宽度都为4,每个图像块都为一个Y分量Ys,其中4个Y分量对应1个U分量Us和一个V分量Vs,这里预置Ns_x=4,Ds_x=2,Ns_y=4,Ds_y=2,Fx和Fy都为2;图2所示为原始YUV420图像块A,把原始YUV420图像块A放大2倍后像素为8x8,如图2所示,包括Y分量1-64,其中缩放后的图像块的宽度为tx,缩放后的图像块的高度ty;所述的预置缩放缓冲区的为:char YUV420_zoom_tmp[3][(2*Ns_x)*(2*Ns_y)]内存;
所述的循环变量x、y表示原始图像的水平和垂直方向的坐标,在循环过程中,x、y分别以2*Ds_x、2*Ds_y为步进值步进。所述的循环变量x1、y1表示缩放后的YUV420图像的水平和垂直方向坐标,在循环过程中,x1、y1分别以2*Ns_x、2*Ns_y为步进值步进;
所述的RGB565图像块输出坐标变量x2、y2,表示的是RGB565图像块输出的水平坐标和垂直坐标;
为便于理解,以放大2倍为例说明,x、y分别以2*Ds_x=2*2=4步进、2*Ds_y=2*2=4步进,即每次处理4个像素的Y分量、1个像素的U分量和1个像素的V分量,如图2所示,先处理前2个像素,对应的Y分量为1、2、9、10(其中包含1个像素的U分量和1个像素的V分量),再处理后2个像素,对应的Y分量为3、4、11、12(其中包含1个像素的U分量和1个像素的V分量),第二次还是处理4个像素,即首先处理前2个像素,对应的Y分量为5、6、13、14(其中包含1个像素的U分量和1个像素的V分量)和再处理后2个像素,对应的Y分量为7、8、15、16(其中包含1个像素的U分量和1个像素的V分量),把4*4大小的分块进入缩放、rgb转换、旋转输出,直到处理完毕。
S702,计算缩放后的YUV420图像的宽度W1、高度H1、缩放后的YUV420图像块的高度ty和宽度tx、Y分量行距stride_s、U分量行距和V分量行距;计算RGB565图像的宽度W2和目标地址的首地址rgb;计算RGB565图像块的行距stride_d、偏移量offset和当前RGB565图像块写入的目标地址p;
所述的缩放后的YUV420图像的宽度W1和高度H1为:W1=W*Fx,H1=H*Fy;
为便于理解,以放大2倍为例说明,如图1所示的原始YUV420图像放大2倍后,缩放后的YUV420图像的高度和宽度分别为2H和2W;
所述的缩放后的YUV420图像的Y分量行距stride_s是根据具体缩放倍数来,即每行像素的个数;所述的缩放后的YUV420图像的U分量行距和V分量行距为stride_s的二分之一;以放大2倍为例说明,Y分量行距stride_s=8,U分量行距和V分量行距为stride_s的二分之一,即都为4;
所述的计算RGB565图像的宽度W2的方法为:
如果旋转,则W2=H1,RGB565图像的宽度等于原始YUV420图像块的高度,缩放后的YUV420图像的高度成为RGB565图像的宽度;
如果不旋转,则W2=W1;
所述的RGB565图像块的行距stride_d的计算方法为:stride_d=W2;为便于理解,以放大2倍为例说明,Y分量行距stride_s=8;
所述的缩放后的YUV420图像块的高度ty和宽度tx为缩放后的YUV420图像块的垂直方向和水平方向像素的个数;
所述的计算RGB565图像的当前目标地址相对于图像首地址的偏移量offset具体为:
如果旋转,offset=0*W2+(W2-1);
如果不旋转,则:offset=0;
所述的offset为当前目标地址相对于图像首地址的偏移量;
所述的RGB565图像的目标地址的首地址rgb为offset*2;
所述的当前RGB565图像块存放的目标地址的指针p+=offset*2;
所述的RGB565图像的目标地址的首地址rgb、RGB565图像块地址偏移量offset和当前RGB565图像块存放的目标地址的指针p这三者的关系是:rgb是输出的RGB565图像的首地址,只需要计算一次,offset是以像素为单位做偏移,rgb+offset*2就得到了以字节为偏移的当前RGB565图像块的输出地址p。每输出一个RGB565图像块,当前RGB565图像块存放的目标地址的指针p都需要做偏移,即rgb+offset*2;
S703,判断是否y<H,如果是,则进入步骤S704,如果否,则进入步骤S720;
S704,判断是否x<W,如果是,则进入步骤S706,如果否,则进入步骤S705;
S705,y+=(2*Ds_y),y1+=(2*Ns_y),x=0,进入步骤S703;
S706,根据所述预置原始YUV420图像水平和垂直方向的缩放倍数,插值滤波生成缩放后的YUV420图像块,并存到缩放缓冲区;
其中缩放后YUV420图像块的宽度为tx,缩放后YUV420图像块的高度为ty;
为便于理解,以放大2倍为例说明,如图1,原始YUV420图像块A像素为4x4,如图2所示,放大2倍后像素为8x8,y和y1以步进值y+=4,y1+=8步进,缩放后的数据存在YUV420_zoom_tmp[3]中,Yt=YUV420_zoom_tmp[0],Ut=YUV420_zoom_tmp[1],Vt=YUV420_zoom_tmp[2],分别以Yt、Ut和Vt分别引用缩放缓冲区中的Y分量、U分量、V分量;此时的tx和ty分别为8;
S707,i=ty/2,j=tx/4;
所述的i=ty/2,表示垂直方向一次跳转2行,所以ty除以2,以放大2倍为例说明,i=4;
所述的j=tx/4,表示水平方向一次处理4个像素,所以tx除以4,以放大2倍为例说明,j=2;
S708,判断是否旋转,如果是,则进入步骤S709,如果否,则进入步骤S714;
所述的判断是根据缩放后的YUV420图像的尺寸与移动终端屏幕尺寸确定是否旋转写入rgb值;
S709,x2=-y1,y2=x1,p= & rgb[(y2*stride_d+x2)*2];
因为要旋转,缩放后的水平的YUV420图像块计算rgp值后按照垂直方向输出,缩放后的垂直方向的YUV420图像块计算rgp值后按照水平方向输出,所以需要交换x1、y1;
为便于理解,以放大2倍为例说明,如图3为缩放后的YUV420图像块的前两个像素包含的4个Y分量、1个U分量和1个V分量;
S710,获取前两个像素的U分量和V分量,计算前两个像素的rgb值,分别写入p,y+=2,p+=2*stride_d,Ut++,Vt++;获取后两个像素的U分量和V分量,计算后两个像素的rgb值,分别写入p,y+=2,p+=2*stride_d,j=j--,Ut++,Vt++;
为便于理解,以放大2倍为例说明,如图3所示,这里获取的U分量和V分量为Y分量Y1、Y2、Y9、Y10所对应的U1分量和V1分量;
所述的计算前两个像素的rgb值,写入p的方法具体为:
p[0]=get_rgb16_value_clip_rgb(u,v,y[0]);
p[stride_d]=get_rgb16_value_clip_rgb(u,v,y[1]);
p[-1]=get_rgb16_value_clip_rgb(u,v,y[stride_s+0]);
p[-1+stride_d]=get_rgb16_value_clip_rgb(u,v,y[stride_s+1]);
所述的get_rgb16_value_clip_rgb()为外部函数,该外部函数完成YUV420到rgb565的转换;
为便于理解,以放大2倍为例说明,R1、R2、R9、R10输出的目标位置如图4所示,为图3中YUV420对应的RGB565图像块旋转输出的目标位置;
所述的y+=2;p+=2*stride_d是y和p做偏移;
所述的获取后2个像素的U分量和V分量,为便于理解,以放大2倍为例说明,如图2所示,此时获取的U分量和V分量为Y分量Y3、Y4、Y11、Y12所对应的U2分量和V2分量;
所述的计算后两个像素的rgb值,分别写入p的过程为:
p[0]=get_rgb16_value_clip_rgb(u,v,y[0]);
p[stride_d]=get_rgb16_value_clip_rgb(u,v,y[1]);
p[-1]=get_rgb16_value_clip_rgb(u,v,y[stride_s+0]);
p[-1+stride_d]=get_rgb16_value_clip_rgb(u,v,y[stride_s+1]);
为便于理解,以放大2倍为例说明,如图4所示R3、R4、R11、R12写入目标地址的位置;
S711,判断j是否等于0,如果是,则进入步骤S712,如果否,则进入步骤S710;
S712,Yt+=-tx+2*t_stride,p+=-2-W*stride_d,i=i--,j=tx/4;
S713,判断i是否等于0,如果是,则进入步骤S719,如果否,则进入步骤S710;
S714,x2=x1,y2=y1,p= & rgb[(y2*stride_d+x2)*2];
S715,获取前两个像素的U分量和V分量,计算前两个像素的rgb值,分别写入p,y+=2,p+=2,Ut++,Vt++;获取后两个像素的U分量和V分量,计算后两个像素的rgb值,y+=2,p+=2,j=j--,Ut++,Vt++;
为便于理解,以放大2倍为例说明,如图2所示,这里获取的U分量和V分量为Y分量Y1、Y2、Y9、Y10所对应的U1分量和V1分量,计算后两个像素的rgb值,分别写入p;图5为图3中YUV420对应的RGB565图像块非旋转写入目标地址的结构图;
所述的计算前两个像素的rgb值,分别写入p,具体为:
p[0]=get_rgb16_value_clip_rgb(u,v,y[0]);
p[1]=get_rgb16_value_clip_rgb(u,v,y[1]);
p[stride_d]=get_rgb16_value_clip_rgb(u,v,y[stride_s+0]);
p[stride_d+1]=get_rgb16_value_clip_rgb(u,v,y[stride_s+1]);
为便于理解,以放大2倍为例说明,如图5为图3中YUV420对应的RGB565图像块R1、R2、R9、R10非旋转写入目标地址的位置;
所述的获取后两个像素的U分量和V分量,为便于理解,以放大2倍为例说明,如图2所示,此时获取的U分量和V分量为Y分量Y3、Y4、Y11、Y12所对应的U2分量和V2分量;
所述的计算后两个像素的rgb值,分别写入p,具体为:
p[0]=get_rgb16_value_clip_rgb(u,v,y[0]);
p[1]=get_rgb16_value_clip_rgb(u,v,y[1]);
p[stride_d]=get_rgb16_value_clip_rgb(u,v,y[stride_s+0]);
p[stride_d+1]=get_rgb16_value_clip_rgb(u,v,y[stride_s+1]);
为便于理解,以放大2倍为例说明,如图5为图3中YUV420对应的RGB565图像块R3、R4、R11、R12非旋转写入目标地址的位置;
S716,判断j=0?如果是,则进入步骤S717,如果否,则进入步骤S715;
S717,Yt+=-tx+2*t_stride,p+=-tx+2*stride_d,i=i--,j=tx/4;
S718,判断i=0?如果是,则进入步骤S719,如果否,则进入步骤S715;
S719,x=x+(2*Ds_x),x1=x1+(2*Ns_x),进入步骤S704;
S720,RGB565图像输出结束。
本实施例中通过预置六个循环变量和计算步进值,在一个相同的循环周期完成整个原始YUV420图像转换成RGB565图像的过程,其中在转换过程中是通过先把原始YUV420图像等分为原始YUV420图像块,对每个原始YUV420图像块进行缩放、颜色转换(即计算rgb值),分别写入目标地址(包括旋转),减少了循环的次数和访问内存的数量,提高了转换效率,输出的RGB565图像可以在不同像素的移动终端显示,通过把原始YUV420图像等分为不同等分比例的原始YUV420图像块和不同的缩放比例,达到最佳的显示效果,减少内存使用量,同时保持数据的局部性,加速内存访问速度。
实施例三
图8是本发明实施例一种YUV420图像转换成RGB565图像系统的总体结构示意图。
所述的系统包括:初始模块、缩放模块、输出模块;
初始模块,与缩放模块相连,用于将原始的YUV420图像等分为一个或一个以上的原始YUV420图像块;预置原始YUV420图像水平和垂直方向的缩放倍数;
所述的YUV420图像的水平和垂直方向缩放倍数Fx=Ns_x/Ds_x,Fy=Ns_y/Ds_y,其中Ns_x和Ds_x、Ns_y和Ds_y的取值满足条件:成缩放倍数关系,且为正整数,同时,(2*Ds_x)*(Ns_x/Ds_x)等于缩放后的YUV420图像块的宽度tx,(2*Ds_y)*(Ns_y/Ds_y)等于缩放后的YUV420图像块的高度ty。基于缩放倍数和需要缩放呈现的效果把YUV420图像分成一个或一个以上的YUV420图像块,每个YUV420图像块由像素组成;
为便于理解,以放大2倍为例说明,如图1所示为原始YUV420图像,原始YUV420图像的高度和宽度分别为H、W,原始YUV420图像分成一个以上的原始YUV420图像块,如图1中的原始YUV420图像块A、B、C,每个原始YUV420图像块的像素为4x4,即原始YUV420图像块的高度和宽度都为4,每个图像块都为一个Y分量Ys,其中4个Y分量对应1个U分量Us和一个V分量Vs;预置Ns_x=4,Ds_x=2,Ns_y=4,Ds_y=2,Fx和Fy都为2;
缩放模块,与初始模块和输出模块相连,用于根据所述预置原始YUV420图像水平和垂直方向的缩放倍数,插值滤波生成缩放后的YUV420图像块;
为便于理解,以放大2倍为例说明,图2所示为原始YUV420图像块A,把原始YUV420图像块A放大2倍后像素为8x8,如图2所示,包括Y分量1-64,其中缩放后的图像块的宽度为tx,缩放后的图像块的高度ty;
输出模块,与缩放模块相连,用于获取缩放后的YUV420图像块的Y分量、U分量和V分量,计算rgb值,根据缩放后的YUV420图像的尺寸与移动终端屏幕尺寸,确定是否旋转并分别将rgb值写入目标地址;
所述的是否旋转是根据缩放后的YUV420图像的尺寸与移动终端屏幕尺寸确定是否需要旋转写入rgb值,即RGB565图像的宽度等于原始YUV420图像块的高度,缩放后的YUV420图像的高度成为RGB565图像的宽度;
所述的rgb值是通过外部函数做颜色转换的值,所述的外部函数为get_rgb16_value_clip_rgb();
本实施例中通过初始模块把原始YUV420图像等分为原始YUV420图像块,缩放模块对原始YUV420图像块进行缩放,输出缩放后的YUV420图像块,输出模块先颜色转换(即计算rgb值),然后根据YUV420图像的尺寸与移动终端屏幕尺寸确定是否旋转分别将rgb值写入目标地址,从而实现对每个原始YUV420图像块连续做缩放、计算rgb值并输出(包括旋转),减少了循环的次数和访问内存的数量,提高了转换效率,输出的RGB565图像可以在各种像素移动终端显示,通过把原始YUV420图像等分为不同等分比例的原始YUV420图像块和不同的缩放比例,达到最佳的显示效果,减少内存使用量,同时保持数据的局部性,加速内存访问速度。
实施例四
图9是本发明实施例一种YUV420图像转换成RGB565图像系统的具体结构图,本实施例中的需要做旋转操作。
所述系统包括:初始模块、第一判断模块、第二判断模块、缩放模块、输出模块、第三判断模块、第四判断模块、步进模块;
初始模块,与第一判断模块相连,用于预置原始YUV420图像的Y、U、V分量,原始YUV420图像等分为一个或一个以上的YUV420图像块;预置YUV420图像的水平方向缩放倍数Fx和垂直方向缩放倍数Fy;预置RGB565图像的目标地址首地址指针rgb和当前RGB565图像块存放的目标地址的指针p,都定义成short*类型;预置缩放缓冲区,用于存放缩放后的YUV420图像块的Y分量、U分量和V分量,分别由变量Yt、Ut和Vt引用;预置循环变量x、y、x1、y1、i、j,初始为0;预置RGB565图像块输出坐标变量x2、y2;计算缩放后的YUV420图像的宽度W1、高度H1、缩放后的YUV420图像块的高度ty和宽度tx、Y分量行距stride_s、U分量行距和V分量行距;计算RGB565图像的宽度W2和目标地址的首地址rgb;计算RGB565图像块的行距stride_d、偏移量offset和当前RGB565图像块写入的目标地址p;
所述的YUV420图像的水平和垂直方向缩放倍数Fx=Ns_x/Ds_x,Fy=Ns_y/Ds_y,其中Ns_x和Ds_x、Ns_y和Ds_y的取值满足条件:成缩放倍数关系,且为正整数,同时,(2*Ds_x)*(Ns_x/Ds_x)等于缩放后的YUV420图像块的宽度tx,(2*Ds_y)*(Ns_y/Ds_y)等于缩放后的YUV420图像块的高度ty。基于缩放倍数和需要缩放呈现的效果把YUV420图像分成一个或一个以上的YUV420图像块,每个YUV420图像块由像素组成;
所述的首地址指针rgb记录RGB565图像块需要存放的目标地址的首地址,所述的当前RGB565图像块存放的目标地址的指针p记录当前RGB565图像块存放的目标地址;
所述的循环变量x、y表示原始图像的水平和垂直方向的坐标,在循环过程中,x、y分别以2*Ds_x、2*Ds_y为步进值步进。所述的循环变量x1、y1表示缩放后的YUV420图像的水平和垂直方向坐标,在循环过程中,x1、y1分别以2*Ns_x、2*Ns_y为步进值步进;
所述的RGB565图像块输出坐标变量x2、y2,表示的是RGB565图像块输出的水平坐标和垂直坐标;
所述的缩放后的YUV420图像的宽度W1和高度H1为:W1=W*Fx,H1=H*Fy;
所述的缩放后的YUV420图像的Y分量行距stride_s是根据具体缩放倍数来,即每行像素的个数;所述的缩放后的YUV420图像的U分量行距和V分量行距为stride_s的二分之一;以放大2倍为例说明,Y分量行距stride_s=8,U分量行距和V分量行距为stride_s的二分之一,即都为4;
所述的RGB565图像的宽度W2=H1,RGB565图像的宽度等于原始YUV420图像块的高度,缩放后的YUV420图像的高度成为RGB565图像的宽度;
所述的缩放后的YUV420图像块的高度ty和宽度tx为缩放后的YUV420图像块的垂直方向和水平方向像素的个数;
所述的RGB565图像块的当前目标地址相对于RGB565图像首地址的偏移量offset=0*W2+(W2-1);
所述的offset为当前目标地址相对于RGB565图像首地址的偏移量;
所述的RGB565图像的目标地址的首地址rgb为offset*2;
所述的当前RGB565图像块存放的目标地址的指针p+=offset*2;
所述的RGB565图像的目标地址的首地址rgb、RGB565图像块的地址偏移量offset和当前RGB图像块存放的目标地址的指针p这三者的关系是:rgb是输出的RGB565图像的首地址,只需要计算一次,offset是以像素为单位做偏移,rgb+offset*2就得到了以字节为偏移的当前RGB565图像块的输出地址p。每输出一个RGB565图像块,当前RGB565图像块存放的目标地址的指针p都需要做偏移,即rgb+offset*2;
第一判断模块,与初始模块、第二判断模块和步进模块相连,用于判断是否y<H,如果是,则通知第二判断模块,如果否,则RGB565图像输出结束;
第二判断模块,与第一判断模块、步进模块和缩放模块相连,用于判断是否x<W,如果是,则通知缩放模块进行缩放,如果否,则通知步进模块;
缩放模块,与第二判断模块、输出模块相连,用于根据所述预置原始YUV420图像水平和垂直方向的缩放倍数,插值滤波生成缩放后的YUV420图像块,并存到缩放缓冲区,i=ty/2,j=tx/4,并通知输出模块;
其中缩放后YUV420图像块的宽度为tx,缩放后YUV420图像块的高度为ty;
输出模块,与缩放模块、第三判断模块和第四判断模块相连,用于接收缩放模块发送的通知、第三判断模块发送的通知和第四判断模块发送的通知,获取前两个像素的U分量和V分量,计算前两个像素的rgb值,分别写入p,y+=2,p+=2*stride_d,Ut++,Vt++,获取后两个像素的U分量和V分量,计算后两个像素的rgb值,分别写入p,y+=2,p+=2*stride_d,j=j--,Ut++,Vt++,并通知第三判断模块进行判断;所述的输出模块在所述的“获取缩放后的YUV420图像块的Y分量、U分量和V分量,计算rgb值,根据缩放后的YUV420图像的尺寸与移动终端屏幕尺寸,确定是否旋转并分别将rgb值写入目标地址”之前还用于如果旋转,则x2=-y1,y2=x1,p= & rgb[(y2*stride_d+x2)*2];
所述的i=ty/2,表示垂直方向一次跳转2行,所以ty除以2,以放大2倍为例说明,i=4;
所述的j=tx/4,表示水平方向一次处理4个像素,所以tx除以4,以放大2倍为例说明,j=2;
所述的计算前两个像素的rgb值并分别写入p,具体为:
p[0]=get_rgb16_value_clip_rgb(u,v,y[0]);
p[stride_d]=get_rgb16_value_clip_rgb(u,v,y[1]);
p[-1]=get_rgb16_value_clip_rgb(u,v,y[stride_s+0]);
p[-1+stride_d]=get_rgb16_value_clip_rgb(u,v,y[stride_s+1]);
所述的计算后两个像素的rgb值,并分别写入p具体为:
p[0]=get_rgb16_value_clip_rgb(u,v,y[0]);
p[stride_d]=get_rgb16_value_clip_rgb(u,v,y[1]);
p[-1]=get_rgb16_value_clip_rgb(u,v,y[stride_s+0]);
p[-1+stride_d]=get_rgb16_value_clip_rgb(u,v,y[stride_s+1]);
所述的get_rgb16_value_clip_rgb()为外部函数,该外部函数完成YUV420到rgb565的转换;
第三判断模块,与输出模块和第四判断模块相连,用于判断j是否等于0,如果是,则Yt+=-tx+2*t_stride,p+=-2-W*stride_d,i=i--,j=tx/4;并通知第四判断模块;如果否,通知输出模块;
第四判断模块,与第三判断模块、输出模块和步进模块相连,用于判断i是否等于0,如果是,则通知步进模块,并通知第二判断模块;如果否,则通知输出模块;
步进模块,与第一判断模块、第二判断模块和第四判断模块相连,用于接收第二判断模块的通知并y+=(2*Ds_y),y1+=(2*Ns_y),x=0,并通知第一判断模块;还用于接收第四判断模块发送的通知并x=x+(2*Ds_x),x1=x1+(2*Ns_x)。
本实施例中通过第二判断模块和第四判断模块的判断结果,通知步进模块对循环变量x、x1、y、y1进行步进,从而获取下一个原始YUV420图像块;通过第三判断模块和第四判断模块的判断结果,通知输出模块计算当前两行的RGB图像块的rgb值并输出(包括旋转);实现了在需要旋转的情况下,在同一个循环周期内完成整个YUV420图像到RGB565图像的转换,减少了循环的次数和访问内存的数量,提高了转换效率,输出的RGB565图像可以在不同像素的移动终端显示,通过把原始YUV420图像等分为不同等分比例的原始YUV420图像块和不同的缩放比例,达到最佳的显示效果,减少内存使用量,同时保持数据的局部性,加速内存访问速度。
实施例五
图9是本发明实施例一种YUV420图像转换成RGB565图像系统的具体结构图,本实施例中的不需要做旋转操作。
所述系统包括:初始模块、第一判断模块、第二判断模块、缩放模块、输出模块、第三判断模块、第四判断模块、步进模块;
初始模块,与第一判断模块相连,用于预置原始YUV420图像的Y、U、V分量,原始YUV420图像等分为一个或一个以上的YUV420图像块;预置YUV420图像的水平方向缩放倍数Fx和垂直方向缩放倍数Fy;预置RGB565图像的目标地址首地址指针rgb和当前RGB565图像块存放的目标地址的指针p,都定义成short*类型;预置缩放缓冲区,用于存放缩放后的YUV420图像块的Y分量、U分量和V分量,分别由变量Yt、Ut和Vt引用;预置循环变量x、y、x1、y1、i、j,初始为0;预置RGB565图像块输出坐标变量x2、y2;计算缩放后的YUV420图像的宽度W1、高度H1、缩放后的YUV420图像块的高度ty和宽度tx、Y分量行距stride_s、U分量行距和V分量行距;计算RGB565图像的宽度W2和目标地址的首地址rgb;计算RGB565图像块的行距stride_d、偏移量offset和当前RGB565图像块写入的目标地址p;
所述的缩放后的YUV420图像的宽度W1和高度H1为:W1=W*Fx,H1=H*Fy;
所述的缩放后的YUV420图像的Y分量行距stride_s是根据具体缩放倍数确定,即每行像素的个数;所述的缩放后的YUV420图像的U分量行距和V分量行距为stride_s的二分之一;
所述的RGB565图像的宽度W2=W1;
所述的RGB565图像的目标地址的首地址rgb为offset*2;
所述的RGB565图像块的行距stride_d=W2;
所述的缩放后的YUV420图像块的高度ty和宽度tx为缩放后的YUV420图像块的垂直方向和水平方向像素的个数;
所述的RGB565图像块的当前目标地址相对于图像首地址的偏移量offset=0;
所述的当前RGB565图像块存放的目标地址的指针p+=offset*2;
第一判断模块,与初始模块、第二判断模块和步进模块相连,用于判断是否y<H,如果是,则通知第二判断模块,如果否,则RGB565图像输出结束;
第二判断模块,与第一判断模块、步进模块和缩放模块相连,用于判断是否x<W,如果是,则通知缩放模块进行缩放,如果否,则通知步进模块;
缩放模块,与第二判断模块和输出模块相连,用于根据所述预置原始YUV420图像水平和垂直方向的缩放倍数,插值滤波生成缩放后的YUV420图像块,并存到缩放缓冲区,i=ty/2,j=tx/4,并通知输出模块;
输出模块,与缩放模块、第三判断模块和第四判断模块相连,用于接收缩放模块发送的通知、第三判断模块发送的通知和第四判断模块发送的通知,获取前两个像素的U分量和V分量,计算前两个像素的rgb值,分别写入p,y+=2,p+=2,Ut++,Vt++,获取后两个像素的U分量和V分量,计算后两个像素的rgb值,y+=2,p+=2,j=j--,Ut++,Vt++,并通知第三判断模块进行判断;所述的输出模块在所述的“获取缩放后的YUV420图像块的Y分量、U分量和V分量,计算rgb值,根据缩放后的YUV420图像的尺寸与移动终端屏幕尺寸,确定是否旋转并分别将rgb值写入目标地址”之前还用于如果不旋转,则x2=x1,y2=y1,p= & rgb[(y2*stride_d+x2)*2];
所述的计算前两个像素的rgb值,并分别写入p具体为:
p[0]=get_rgb16_value_clip_rgb(u,v,y[0]);
p[1]=get_rgb16_value_clip_rgb(u,v,y[1]);
p[stride_d]=get_rgb16_value_clip_rgb(u,v,y[stride_s+0]);
p[stride_d+1]=get_rgb16_value_clip_rgb(u,v,y[stride_s+1]);
所述的计算后两个像素的rgb值,并分别写入p具体为:
p[0]=get_rgb16_value_clip_rgb(u,v,y[0]);
p[1]=get_rgb16_value_clip_rgb(u,v,y[1]);
p[stride_d]=get_rgb16_value_clip_rgb(u,v,y[stride_s+0]);
p[stride_d+1]=get_rgb16_value_clip_rgb(u,v,y[stride_s+1]);
第三判断模块,与输出模块和第四判断模块相连,用于判断j是否等于0,如果是,则Yt+=-tx+2*t_stride,p+=-tx+2*stride_d,i=i--,j=tx/4;并通知第四判断模块;如果否,通知输出模块;
第四判断模块,与第三判断模块、输出模块和步进模块相连,用于判断i是否等于0,如果是,则通知步进模块,并通知第二判断模块;如果否,则通知输出模块;
步进模块,与第一判断模块、第二判断模块和第四判断模块相连,用于接收第二判断模块的通知并y+=(2*Ds_y),y1+=(2*Ns_y),x=0,并通知第一判断模块;还用于接收第四判断模块发送的通知并x=x+(2*Ds_x),x1=x1+(2*Ns_x)。
本实施例中通过第二判断模块和第四判断模块的判断结果,通知步进模块对循环变量x、x1、y、y1进行步进,从而获取下一个原始YUV420图像块;通过第三判断模块和第四判断模块的判断结果,通知输出模块计算当前两行的RGB图像块的rgb值并输出;实现了在不需要旋转的情况下,在同一个循环周期内完成整个YUV420图像到RGB565图像的转换,减少了循环的次数和访问内存的数量,提高了转换效率,输出的RGB565图像可以在不同像素的移动终端显示,通过把原始YUV420图像等分为不同等分比例的原始YUV420图像块和不同的缩放比例,达到最佳的显示效果,减少内存使用量,同时保持数据的局部性,加速内存访问速度。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (14)
1.一种YUV420图像转换成RGB565图像的方法,其特征在于,所述方法包括以下步骤:
将原始的YUV420图像等分为一个或一个以上的原始YUV420图像块;预置原始YUV420图像水平和垂直方向的缩放倍数;
根据所述预置原始YUV420图像水平和垂直方向的缩放倍数,插值滤波生成缩放后的YUV420图像块;
获取缩放后的YUV420图像块的Y分量、U分量和V分量,计算rgb值,根据缩放后的YUV420图像的尺寸与移动终端屏幕尺寸,确定是否旋转并分别将rgb值写入目标地址。
2.如权利要求1所述的YUV420图像转换成RGB565图像的方法,其特征在于,
所述的步骤“根据所述预置原始YUV420图像水平和垂直方向的缩放倍数,插值滤波生成缩放后的YUV420图像块”之前还包括步骤:
“预置原始YUV420图像的Y、U、V分量,以及原始YUV420图像的宽度W和高度H;
预置RGB565图像的目标地址首地址指针rgb和当前RGB565图像块存放的目标地址的指针p,都定义成short*类型;
预置缩放缓冲区,用于存放缩放后的YUV420图像的Y分量、U分量和V分量,分别由变量Yt、Ut和Vt引用;
预置循环变量x、y、x1、y1、i、j,初始为0;
预置RGB565图像块输出坐标变量x2、y2;
计算缩放后的YUV420图像的宽度W1、高度H1、缩放后的YUV420图像块的高度ty和宽度tx、Y分量行距分量行距和V分量行距;计算RGB565图像的宽度W2和目标地址的首地址rgb;计算RGB565图像块的行距stride_d、偏移量offset和当前RGB565图像块写入的目标地址p;
如果y<H且x<W,则进入步骤“根据所述预置原始YUV420图像水平和垂直方向的缩放倍数,插值滤波生成缩放后的YUV420图像块”;
所述的步骤“获取缩放后的YUV420图像块的Y分量、U分量和V分量,计算rgb值,根据缩放后的YUV420图像的尺寸与移动终端屏幕尺寸,确定是否旋转并分别将rgb值写入目标地址”中旋转时写入目标地址的方法具体为:
所述的步骤“获取缩放后的YUV420图像块的Y分量、U分量和V分量,计算rgb值,根据缩放后的YUV420图像的尺寸与移动终端屏幕尺寸,确定是否旋转并分别将rgb值写入目标地址”之前还包括步骤:
“i=ty/2,j=tx/4;
x2=-y1,y2=x1,p= & rgb[(y2*stride_d+x2)*2]”;
所述的步骤“获取缩放后的YUV420图像块的Y分量、U分量和V分量,计算rgb值,根据缩放后的YUV420图像的尺寸与移动终端屏幕尺寸,确定是否旋转并分别将rgb值写入目标地址”分为两个步骤为:
“获取前两个像素的U分量和V分量,计算前两个像素的rgb值,分别写入目标地址,y+=2,p+=2*stride_d,Ut++,Vt++;
获取后两个像素的U分量和V分量,计算后两个像素的rgb值,分别写入目标地址,y+=2,p+=2*stride_d,j=j--,Ut++,Vt++”;
所述的步骤“获取后两个像素的U分量和V分量,计算后两个像素的rgb值,分别写入目标地址,y+=2,p+=2*stride_d,j=j--,Ut++,Vt++”之后包括步骤:
“如果j等于0,则Yt+=-tx+2*t_stride,p+=-2-W*stride_d,i=i--,j=tx/4;
如果i等于0,则x=x+(2*Ds_x),x1=x1+(2*Ns_x);
如果x不小于W,则y+=(2*Ds_y),y1+=(2*Ns_y),x=0;
如果y不小于H,则RGB565图像输出结束”;
其中所述的Ns_x和Ds_x、Ns_y和Ds_y的取值满足条件:成缩放倍数关系,且为正整数,同时,(2*Ds_x)*(Ns_x/Ds_x)等于缩放后的YUV420图像块的宽度,(2*Ds_y)*(Ns_y/Ds_y)等于缩放后的YUV420图像块的高度。
3.如权利要求2所述的YUV420图像转换成RGB565图像的方法,其特征在于,
所述的步骤“获取前两个像素的U分量和V分量,计算前两个像素的rgb值,分别写入目标地址”具体为:
p[0]=get_rgb16_value_clip_rgb(u,v,y[0]);
p[stride_d]=get_rgb16_value_clip_rgb(u,v,y[1]);
p[-1]=get_rgb16_value_clip_rgb(u,v,y[stride_s+0]);
p[-1+stride_d]=get_rgb16_value_clip_rgb(u,v,y[stride_s+1]);
所述的步骤“获取后两个像素的U分量和V分量,计算后两个像素的rgb值,分别写入目标地址”具体为:
p[0]=get_rgb16_value_clip_rgb(u,v,y[0]);
p[stride_d]=get_rgb16_value_clip_rgb(u,v,y[1]);
p[-1]=get_rgb16_value_clip_rgb(u,v,y[stride_s+0]);
p[-1+stride_d]=get_rgb16_value_clip_rgb(u,v,y[stride_s+1])。
4.如权利要求2所述的YUV420图像转换成RGB565图像的方法,其特征在于,
所述的步骤“如果j等于0,则Yt+=-tx+2*t_stride,p+=-2-W*stride_d,i=i--,j=tx/4”之后还包括步骤“如果j不等于0,则进入步骤“获取缩放后的YUV420图像块的Y分量、U分量和V分量,计算rgb值,根据缩放后的YUV420图像的尺寸与移动终端屏幕尺寸,确定是否旋转并分别将rgb值写入目标地址”;
所述的步骤“如果i等于0,则x=x+(2*Ds_x),x1=x1+(2*Ns_x)”之后还包括步骤“如果i不等于0,则进入步骤“获取缩放后的YUV420图像块的Y分量、U分量和V分量,计算rgb值,根据缩放后的YUV420图像的尺寸与移动终端屏幕尺寸,确定是否旋转并分别将rgb值写入目标地址”。
5.如权利要求1所述的YUV420图像转换成RGB565图像的方法,其特征在于,
所述的步骤“根据所述预置原始YUV420图像水平和垂直方向的缩放倍数,插值滤波生成缩放后的YUV420图像块”之前还包括步骤:
“预置原始YUV420图像的Y、U、V分量,以及原始YUV420图像的宽度W和高度H;
预置RGB565图像的目标地址首地址指针rgb和当前RGB565图像块存放的目标地址的指针p,都定义成short*类型;
预置缩放缓冲区,用于存放缩放后的YUV420图像的Y分量、U分量和V分量,分别由变量Yt、Ut和Vt引用;
预置循环变量x、y、x1、y1、i、j,初始为0;
预置RGB565图像块输出坐标变量x2、y2;
计算缩放后的YUV420图像的宽度W1、高度H1、缩放后的YUV420图像块的高度ty和宽度tx、Y分量行距stride_s、U分量行距和V分量行距;计算RGB565图像的宽度W2和目标地址的首地址rgb;计算RGB565图像块的行距stride_d、偏移量offset和当前RGB565图像块写入的目标地址p;
如果y<H且x<W,则进入步骤“根据所述预置原始YUV420图像水平和垂直方向的缩放倍数,插值滤波生成缩放后的YUV420图像块”;
所述的步骤“获取缩放后的YUV420图像块的Y分量、U分量和V分量,计算rgb值,根据缩放后的YUV420图像的尺寸与移动终端屏幕尺寸,确定是否旋转并分别将rgb值写入目标地址”中不需要旋转时写入目标地址的方法具体为:
所述的步骤“获取缩放后的YUV420图像块的Y分量、U分量和V分量,计算rgb值,根据缩放后的YUV420图像的尺寸与移动终端屏幕尺寸,确定是否旋转并分别将rgb值写入目标地址”之前还包括步骤:
“i=ty/2,j=tx/4;
x2=x1,y2=y1,p= & rgb[(y2*stride_d+x2)*2]”;
所述的步骤“获取缩放后的YUV420图像块的Y分量、U分量和V分量,计算rgb值,根据缩放后的YUV420图像的尺寸与移动终端屏幕尺寸,确定是否旋转并分别将rgb值写入目标地址”分为两个步骤为:
“获取前两个像素的U分量和V分量,计算前两个像素的rgb值,分别写入目标地址,y+=2,p+=2,Ut++,Vt++;
获取后两个像素的U分量和V分量,计算后两个像素的rgb值,分别写入目标地址,y+=2,p+=2,j=j--,Ut++,Vt++”;
所述的步骤“获取后两个像素的U分量和V分量,计算后两个像素的rgb值,分别写入目标地址,y+=2,p+=2,j=j--,Ut++,Vt++”之后还包括步骤:
“如果j等于0,则Yt+=-tx+2*t_stride,p+=-tx+2*stride_d,i=i--,j=tx/4;
如果i等于0,则x=x+(2*Ds_x),x1=x1+(2*Ns_x);
如果x不小于W,则y+=(2*Ds_y),y1+=(2*Ns_y),x=0;
如果y不小于H,则RGB565图像输出结束”;
其中所述的Ns_x和Ds_x、Ns_y和Ds_y的取值满足条件:成缩放倍数关系,且为正整数,同时,(2*Ds_x)*(Ns_x/Ds_x)等于缩放后的YUV420图像块的宽度,(2*Ds_y)*(Ns_y/Ds_y)等于缩放后的YUV420图像块的高度。
6.如权利要求5所述的YUV420图像转换成RGB565图像的方法,其特征在于,所述的步骤“获取前两个像素的U分量和V分量,计算前两个像素的rgb值,分别写入目标地址”具体为:
p[0]=get_rgb16_value_clip_rgb(u,v,y[0]);
p[1]=get_rgb16_value_clip_rgb(u,v,y[1]);
p[stride_d]=get_rgb16_value_clip_rgb(u,v,y[stride_s+0]);
p[stride_d+1]=get_rgb16_value_clip_rgb(u,v,y[stride_s+1]);
所述的步骤“获取后两个像素的U分量和V分量,计算后两个像素的rgb值,分别写入目标地址”具体为:
p[0]=get_rgb16_value_clip_rgb(u,v,y[0]));
p[1]=get_rgb16_value_clip_rgb(u,v,y[1]));
p[stride_d]=get_rgb16_value_clip_rgb(u,v,y[stride_s+0]);
p[stride_d+1]=get_rgb16_value_clip_rgb(u,v,y[stride_s+1])。
7.如权利要求5所述的YUV420图像转换成RGB565图像的方法,其特征在于,
所述的步骤“如果j等于0,则Yt+=-tx+2*t_stride,p+=-tx+2*stride_d,i=i--,j=tx/4”之后还包括步骤“如果j不等于0,则进入步骤“获取缩放后的YUV420图像块的Y分量、U分量和V分量,计算rgb值,根据缩放后的YUV420图像的尺寸与移动终端屏幕尺寸,确定是否旋转并分别将rgb值写入目标地址”;
所述的步骤“如果i等于0,则x=x+(2*Ds_x),x1=x1+(2*Ns_x)”还包括步骤“如果i不等于0,则进入步骤“获取缩放后的YUV420图像块的Y分量、U分量和V分量,计算rgb值,根据缩放后的YUV420图像的尺寸与移动终端屏幕尺寸,确定是否旋转并分别将rgb值写入目标地址”。
8.如权利要求2所述的YUV420图像转换成RGB565图像的方法,其特征在于,
所述的缩放后的YUV420图像的宽度W1和高度H1为:W1=W*Fx,H1=H*Fy;
所述的缩放后的YUV420图像的Y分量行距stride_s是根据具体缩放倍数确定,即每行像素的个数;所述的缩放后的YUV420图像的U分量行距和V分量行距为stride_s的二分之一;
所述的RGB565图像的宽度W2=H1;
所述的RGB565图像的目标地址的首地址rgb为offset*2;
所述的RGB565图像块的行距stride_d=W2;
所述的缩放后的YUV420图像块的高度ty和宽度tx为缩放后的YUV420图像块的垂直方向和水平方向像素的个数;
所述的RGB565图像块的当前目标地址相对于图像首地址的偏移量offset=0*W2+(W2-1);
所述的当前RGB565图像块存放的目标地址的指针p+=offset*2。
9.如权利要求5所述的YUV420图像转换成RGB565图像的方法,其特征在于,
所述的缩放后的YUV420图像的宽度W1和高度H1为:W1=W*Fx,H1=H*Fy;
所述的缩放后的YUV420图像的Y分量行距stride_s是根据具体缩放倍数确定,即每行像素的个数;所述的缩放后的YUV420图像的U分量行距和V分量行距为stride_s的二分之一;
所述的RGB565图像的宽度W2=W1;
所述的RGB565图像的目标地址的首地址rgb为offset*2;
所述的RGB565图像块的行距stride_d=W2;
所述的缩放后的YUV420图像块的高度ty和宽度tx为缩放后的YUV420图像块的垂直方向和水平方向像素的个数;
所述的RGB565图像块的当前目标地址相对于图像首地址的偏移量offset=0;
所述的当前RGB565图像块存放的目标地址的指针p+=offset*2。
10.一种YUV420图像转换成RGB565图像的系统,其特征在于,所述系统包括:初始模块、缩放模块、输出模块;
所述的初始模块与缩放模块相连,用于将原始的YUV420图像等分为一个或一个以上的原始YUV420图像块;预置原始YUV420图像水平和垂直方向的缩放倍数;
所述的缩放模块与初始模块和输出模块相连,用于根据所述预置原始YUV420图像水平和垂直方向的缩放倍数,插值滤波生成缩放后的YUV420图像块;
所述的输出模块与缩放模块相连,用于获取缩放后的YUV420图像块的Y分量、U分量和V分量,计算rgb值,根据缩放后的YUV420图像的尺寸与移动终端屏幕尺寸,确定是否旋转并分别将rgb值写入目标地址。
11.如权利要求10所述的YUV420图像转换成RGB565图像的系统,其特征在于,所述的系统还包括第一判断模块、第二判断模块、第三判断模块、第四判断模块和步进模块;
所述的初始模块还用于:预置原始YUV420图像的Y、U、V分量,以及原始YUV420图像的宽度W和高度H;预置RGB565图像的目标地址首地址指针rgb和当前RGB565图像块存放的目标地址的指针p,都定义成short*类型;预置缩放缓冲区,用于存放缩放后的YUV420图像的Y分量、U分量和V分量,分别由变量Yt、Ut和Vt引用;预置循环变量x、y、x1、y1、i、j,初始为0;预置RGB565图像块输出坐标变量x2、y2;计算缩放后的YUV420图像的宽度W1、高度H1、缩放后的YUV420图像块的高度ty和宽度tx、Y分量行距stride_s、U分量行距和V分量行距;计算RGB565图像的宽度W2和目标地址的首地址rgb;计算RGB565图像块的行距stride_d、偏移量offset和当前RGB565图像块写入的目标地址p;
所述的第一判断模块与初始模块、第二判断模块和步进模块相连,用于判断是否y<H,如果是,则通知第二判断模块,如果否,则RGB565图像输出结束;
所述的第二判断模块与第一判断模块、步进模块和缩放模块相连,用于判断是否x<W,如果是,则通知缩放模块进行缩放,如果否,则通知步进模块;
所述的缩放模块还用于i=ty/2,j=tx/4,并通知输出模块;
所述的输出模块在“获取缩放后的YUV420图像块的Y分量、U分量和V分量,计算rgb值,根据缩放后的YUV420图像的尺寸与移动终端屏幕尺寸,确定是否旋转并分别将rgb值写入目标地址”之前还用于如果旋转,则x2=-y1,y2=x1,p= & rgb[(y2*stride_d+x2)*2];
所述的输出模块中所述的“获取缩放后的YUV420图像块的Y分量、U分量和V分量,计算rgb值,根据缩放后的YUV420图像的尺寸与移动终端屏幕尺寸,确定是否旋转并分别将rgb值写入目标地址”具体为:
获取前两个像素的U分量和V分量,计算前两个像素的rgb值,分别写入目标地址,具体为:
p[0]=get_rgb16_value_clip_rgb(u,v,y[0]);
p[stride_d]=get_rgb16_value_clip_rgb(u,v,y[1]);
p[-1]=get_rgb16_value_clip_rgb(u,v,y[stride_s+0]);
p[-1+stride_d]=get_rgb16_value_clip_rgb(u,v,y[stride_s+1]);
y+=2,p+=2*stride_d,Ut++,Vt++;
获取后两个像素的U分量和V分量,计算后两个像素的rgb值,分别写入目标地址,具体为:
p[0]=get_rgb16_value_clip_rgb(u,v,y[0]);
p[stride_d]=get_rgb16_value_clip_rgb(u,v,y[1]);
p[-1]=get_rgb16_value_clip_rgb(u,v,y[stride_s+0]);
p[-1+stride_d]=get_rgb16_value_clip_rgb(u,v,y[stride_s+1]);
y+=2,p+=2*stride_d,j=j--,Ut++,Vt++;
所述的第三判断模块与输出模块和第四判断模块相连,用于判断j是否等于0,如果是,则Yt+=-tx+2*t_stride,p+=-2-W*stride_d,i=i--,j=tx/4;并通知第四判断模块;如果否,通知输出模块;
所述的第四判断模块与第三判断模块、输出模块和步进模块相连,用于判断i是否等于0,如果是,则通知步进模块,并通知第二判断模块;如果否,则通知输出模块;
所述的步进模块与第一判断模块、第二判断模块和第四判断模块相连,用于接收第二判断模块的通知并y+=(2*Ds_y),y1+=(2*Ns_y),x=0,并通知第一判断模块;还用于接收第四判断模块发送的通知并x=x+(2*Ds_x),x1=x1+(2*Ns_x);
其中Ns_x和Ds_x、Ns_y和Ds_y的取值满足条件:成缩放倍数关系,且为正整数,同时,(2*Ds_x)*(Ns_x/Ds_x)等于缩放后的YUV420图像块的宽度,(2*Ds_y)*(Ns_y/Ds_y)等于缩放后的YUV420图像块的高度。
12.如权利要求10所述的YUV420图像转换成RGB565图像的系统,其特征在于,所述的系统还包括第一判断模块、第二判断模块、第三判断模块、第四判断模块和步进模块;
所述的初始模块还用于:预置原始YUV420图像的Y、U、V分量,以及原始YUV420图像的宽度W和高度H;预置RGB565图像的目标地址首地址指针rgb和当前RGB565图像块存放的目标地址的指针p,都定义成short*类型;预置缩放缓冲区,用于存放缩放后的YUV420图像的Y分量、U分量和V分量,分别由变量Yt、Ut和Vt引用;预置循环变量x、y、x1、y1、i、j,初始为0;预置RGB565图像块输出坐标变量x2、y2;计算缩放后的YUV420图像的宽度W1、高度H1、缩放后的YUV420图像块的高度ty和宽度tx、Y分量行距stride_s、U分量行距和V分量行距;计算RGB565图像的宽度W2和目标地址的首地址rgb;计算RGB565图像块的行距stride_d、偏移量offset和当前RGB565图像块写入的目标地址p;
所述的第一判断模块与初始模块、第二判断模块和步进模块相连,用于判断是否y<H,如果是,则通知第二判断模块,如果否,则RGB565图像输出结束;
所述的第二判断模块与第一判断模块、步进模块和缩放模块相连,用于判断是否x<W,如果是,则通知缩放模块进行缩放,如果否,则通知步进模块;
所述的缩放模块还用于i=ty/2,j=tx/4,并通知输出模块;
所述的输出模块在“获取缩放后的YUV420图像块的Y分量、U分量和V分量,计算rgb值,根据缩放后的YUV420图像的尺寸与移动终端屏幕尺寸,确定是否旋转并分别将rgb值写入目标地址”之前还用于如果不需要旋转,则x2=x1,y2=y1,p= & rgb[(y2*stride_d+x2)*2];
所述的输出模块中所述的“获取缩放后的YUV420图像块的Y分量、U分量和V分量,计算rgb值,根据缩放后的YUV420图像的尺寸与移动终端屏幕尺寸,确定是否旋转并分别将rgb值写入目标地址”具体为:
“获取前两个像素的U分量和V分量,计算前两个像素的rgb值,分别写入目标地址”具体为:
p[0]=get_rgb16_value_clip_rgb(u,v,y[0]);
p[1]=get_rgb16_value_clip_rgb(u,v,y[1]);
p[stride_d]=get_rgb16_value_clip_rgb(u,v,y[stride_s+0]);
p[stride_d+1]=get_rgb16_value_clip_rgb(u,v,y[stride_s+1]);
y+=2,p+=2,Ut++,Vt++;
获取后两个像素的U分量和V分量,计算后两个像素的rgb值,分别写入目标地址,具体为:
p[0]=get_rgb16_value_clip_rgb(u,v,y[0]);
p[1]=get_rgb16_value_clip_rgb(u,v,y[1]);
p[stride_d]=get_rgb16_value_clip_rgb(u,v,y[stride_s+0]);
p[stride_d+1]=get_rgb16_value_clip_rgb(u,v,y[stride_s+1]);
y+=2,p+=2,j=j--,Ut++,Vt++;
所述的第三判断模块与输出模块和第四判断模块相连,用于判断j是否等于0,如果是,则Yt+=-tx+2*t_stride,p+=-tx+2*stride_d,i=i--,j=tx/4;并通知第四判断模块;如果否,通知输出模块;
所述的第四判断模块与第三判断模块和输出模块相连,用于判断i是否等于0,如果是,则通知步进模块,并通知第二判断模块;如果否,则通知输出模块;
所述的步进模块与第一判断模块、第二判断模块和第四判断模块相连,用于接收第二判断模块的通知并y+=(2*Ds_y),y1+=(2*Ns_y),x=0,并通知第一判断模块;还用于接收第四判断模块的通知,并对x=x+(2*Ds_x),x1=x1+(2*Ns_x);
其中Ns_x和Ds_x、Ns_y和Ds_y的取值满足条件:成缩放倍数关系,且为正整数,同时,(2*Ds_x)*(Ns_x/Ds_x)等于缩放后的YUV420图像块的宽度,(2*Ds_y)*(Ns_y/Ds_y)等于缩放后的YUV420图像块的高度。
13.如权利要求10所述的YUV420图像转换成RGB565图像的系统,其特征在于,
所述的缩放后的YUV420图像的宽度W1和高度H1为:W1=W*Fx,H1=H*Fy;
所述的缩放后的YUV420图像的Y分量行距stride_s是根据具体缩放倍数确定,即每行像素的个数;所述的缩放后的YUV420图像的U分量行距和V分量行距为stride_s的二分之一;
所述的RGB565图像的宽度W2=H1;
所述的RGB565图像的目标地址的首地址rgb为offset*2;
所述的RGB565图像块的行距stride_d=W2;
所述的缩放后的YUV420图像块的高度ty和宽度tx为缩放后的YUV420图像块的垂直方向和水平方向像素的个数;
所述的RGB565图像块的当前目标地址相对于图像首地址的偏移量offset=0*W2+(W2-1);
所述的当前RGB565图像块存放的目标地址的指针p+=offset*2。
14.如权利要求12所述的YUV420图像转换成RGB565图像的系统,其特征在于,
所述的缩放后的YUV420图像的宽度W1和高度H1为:W1=W*Fx,H1=H*Fy;
所述的缩放后的YUV420图像的Y分量行距stride_s是根据具体缩放倍数确定,即每行像素的个数;所述的缩放后的YUV420图像的U分量行距和V分量行距为stride_s的二分之一;
所述的RGB565图像的宽度W2=W1;
所述的RGB565图像的目标地址的首地址rgb为offset*2;
所述的RGB565图像块的行距stride_d=W2;
所述的缩放后的YUV420图像块的高度ty和宽度tx为缩放后的YUV420图像块的垂直方向和水平方向像素的个数;
所述的RGB565图像块的当前目标地址相对于图像首地址的偏移量offset=0;
所述的当前RGB565图像块存放的目标地址的指针p+=offset*2。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010616187XA CN102073987A (zh) | 2010-12-30 | 2010-12-30 | 一种yuv420图像转换成rgb565图像的方法和系统 |
CN2011102782921A CN102281382A (zh) | 2010-12-30 | 2011-09-19 | 一种yuv420图像转换成rgb565图像的方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010616187XA CN102073987A (zh) | 2010-12-30 | 2010-12-30 | 一种yuv420图像转换成rgb565图像的方法和系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102073987A true CN102073987A (zh) | 2011-05-25 |
Family
ID=44032518
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201010616187XA Pending CN102073987A (zh) | 2010-12-30 | 2010-12-30 | 一种yuv420图像转换成rgb565图像的方法和系统 |
CN2011102782921A Pending CN102281382A (zh) | 2010-12-30 | 2011-09-19 | 一种yuv420图像转换成rgb565图像的方法和系统 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2011102782921A Pending CN102281382A (zh) | 2010-12-30 | 2011-09-19 | 一种yuv420图像转换成rgb565图像的方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (2) | CN102073987A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103220485A (zh) * | 2012-01-18 | 2013-07-24 | 腾讯科技(深圳)有限公司 | 视频播放旋转画面的方法及系统 |
CN105681800A (zh) * | 2016-01-27 | 2016-06-15 | 桂林长海发展有限责任公司 | 一种yuv420快速转成rgb格式的装置和方法 |
CN108076336A (zh) * | 2016-11-14 | 2018-05-25 | 北京航天长峰科技工业集团有限公司 | 一种基于avx技术的快速颜色空间转换方法 |
CN113538607A (zh) * | 2021-09-15 | 2021-10-22 | 北京小鸟科技股份有限公司 | 基于人工图像y分量不变性的yuv图像转换方法及系统 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111508038A (zh) | 2020-04-17 | 2020-08-07 | 北京百度网讯科技有限公司 | 图像处理方法、装置、电子设备及计算机可读存储介质 |
-
2010
- 2010-12-30 CN CN201010616187XA patent/CN102073987A/zh active Pending
-
2011
- 2011-09-19 CN CN2011102782921A patent/CN102281382A/zh active Pending
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103220485A (zh) * | 2012-01-18 | 2013-07-24 | 腾讯科技(深圳)有限公司 | 视频播放旋转画面的方法及系统 |
CN105681800A (zh) * | 2016-01-27 | 2016-06-15 | 桂林长海发展有限责任公司 | 一种yuv420快速转成rgb格式的装置和方法 |
CN105681800B (zh) * | 2016-01-27 | 2019-02-05 | 桂林长海发展有限责任公司 | 一种yuv420快速转成rgb格式的装置和方法 |
CN108076336A (zh) * | 2016-11-14 | 2018-05-25 | 北京航天长峰科技工业集团有限公司 | 一种基于avx技术的快速颜色空间转换方法 |
CN113538607A (zh) * | 2021-09-15 | 2021-10-22 | 北京小鸟科技股份有限公司 | 基于人工图像y分量不变性的yuv图像转换方法及系统 |
CN113538607B (zh) * | 2021-09-15 | 2021-12-24 | 北京小鸟科技股份有限公司 | 基于人工图像y分量不变性的yuv图像转换方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN102281382A (zh) | 2011-12-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101261740B (zh) | 一种图像的存储处理方法 | |
CN102073987A (zh) | 一种yuv420图像转换成rgb565图像的方法和系统 | |
CN102017638A (zh) | 视频编码/解码装置 | |
CN101778226B (zh) | 一种高清图像防锯齿方法、装置及数字电视接收终端 | |
CN102291531A (zh) | 图像处理装置、图像处理方法和程序 | |
CN101562006B (zh) | 一种图像缩放的方法及装置 | |
CN101546527B (zh) | 一种液晶显示控制器及图像缩放方法 | |
JP3626687B2 (ja) | 画像処理装置 | |
KR100818034B1 (ko) | 데이터 전송 방법, 회로 장치 및 데이터 전송 장치 | |
CN101778280B (zh) | 一种基于avs运动补偿亮度插值运算的电路及方法 | |
US20050047502A1 (en) | Method and apparatus for the efficient representation of interpolated video frames for motion-compensated coding | |
CN100535939C (zh) | 用于处理图像数据的电子设备和方法 | |
CN101141559A (zh) | 串行输入并行输出的视频图像亮度插值的方法和装置 | |
CN103237211B (zh) | 一种基于fpga的视频亚像素亮度插值的方法及其装置 | |
CN203206399U (zh) | 一种基于fpga的视频亚像素亮度插值的装置 | |
CN103188487B (zh) | 视频图像中的卷积方法及视频图像处理系统 | |
CN102300086A (zh) | 对参考帧边界进行扩展和对运动补偿参考样本位置进行限定的方法 | |
JP2004509528A (ja) | DCTインタフェースのためのRGB色空間とYCrCb色空間との間のデータ転送 | |
CN102263924A (zh) | 一种基于双三次插值的图像处理方法及其图像显示方法 | |
US8577185B2 (en) | Apparatus and method for interpolating and rendering image on mobile devices | |
CN114078078A (zh) | 一种图像格式转换方法、装置及存储介质 | |
CN101556789B (zh) | 一种图像缩放控制系统及方法 | |
JPH08116545A (ja) | 画像伝送方法および画像伝送システム | |
CN102891998B (zh) | 一种图像缩放、编码方法及系统 | |
CN101459838B (zh) | 一种帧间预测系统、方法及多媒体处理器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Open date: 20110525 |
|
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 1157919 Country of ref document: HK |
|
REG | Reference to a national code |
Ref country code: HK Ref legal event code: WD Ref document number: 1157919 Country of ref document: HK |