CN102073987A - 一种yuv420图像转换成rgb565图像的方法和系统 - Google Patents

一种yuv420图像转换成rgb565图像的方法和系统 Download PDF

Info

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
Application number
CN201010616187XA
Other languages
English (en)
Inventor
张磊
邓邹平
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
SHENZHEN RONGCHUANG TIANXIA TECHNOLOGY DEVELOPMENT Co Ltd
Shenzhen Temobi Science and Technology Co Ltd
Original Assignee
SHENZHEN RONGCHUANG TIANXIA TECHNOLOGY DEVELOPMENT Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by SHENZHEN RONGCHUANG TIANXIA TECHNOLOGY DEVELOPMENT Co Ltd filed Critical SHENZHEN RONGCHUANG TIANXIA TECHNOLOGY DEVELOPMENT Co Ltd
Priority to CN201010616187XA priority Critical patent/CN102073987A/zh
Publication of CN102073987A publication Critical patent/CN102073987A/zh
Priority to CN2011102782921A priority patent/CN102281382A/zh
Pending legal-status Critical Current

Links

Images

Abstract

本发明公开一种YUV420图像转换成RGB565图像的方法和系统,通过把原始YUV420图像等分为原始YUV420图像块并进行缩放,获取缩放后的YUV420图像块的U分量和V分量,计算rgb值,根据YUV420图像的尺寸与移动终端屏幕尺寸确定是否旋转分别将rgb值写入目标地址,从而实现对每个原始YUV420图像块连续做缩放、计算rgb值并输出(含旋转),减少了循环的次数和访问内存的数量,提高了转换效率,输出的RGB565图像可以在不同像素的移动终端显示,通过把原始YUV420图像等分为不同等分比例的原始YUV420图像块和不同的缩放比例,达到最佳的显示效果,加速内存访问速度。

Description

一种YUV420图像转换成RGB565图像的方法和系统
技术领域
本发明涉及视频播放领域,尤其涉及一种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分量行距
Figure FSA00000404323900011
分量行距和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。
CN201010616187XA 2010-12-30 2010-12-30 一种yuv420图像转换成rgb565图像的方法和系统 Pending CN102073987A (zh)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111508038A (zh) 2020-04-17 2020-08-07 北京百度网讯科技有限公司 图像处理方法、装置、电子设备及计算机可读存储介质

Cited By (6)

* Cited by examiner, † Cited by third party
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