专利名称:一种yuv420图像转换成rgb565图像的方法和系统的制作方法
技术领域:
本发明涉及视频播放领域,尤其涉及一种YUV420图像转换成RGB565图像的方法 和系统。
背景技术:
现有技术中视频解码器直接解码生成的YUV420图像文件在许多移动终端中是不 能直接显示的,必须经过YUV420转换成RGB565才能显示,另外,许多的移动终端屏幕像 素与视频图像的尺寸不一致,导致移动终端在显示RGB565时会出现很多空白区域,降低 了用户的体验效果,例如视频图像的尺寸的像素为MOxlSO,而移动终端屏幕为M0x320, 那么导致移动终端在显示RGB565格式的视频文件时会在上、下两端出现很多空白区域, 这就需要在移动终端显示视频之前做缩放、旋转、颜色转换(即计算rgb值)的操作步 骤,因YUV420图像在做缩放、旋转和颜色转换时,每个操作步骤都需要经过2次循环,这 样累计下来的循环次数比较多,而且每步的循环都需要重新访问内存,效率低,以像素为 240xl80YUV420图像转换成像素为320x240RGB565图像为例,通常需要32(^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图像的水平和垂直方向缩放倍数!7X = 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图像块的像素为虹4,即原始YUV420 图像块的高度和宽度都为4,每个图像块都为一个Y分量k,其中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_rgbl6_ 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图像的水平方向缩放倍数h和垂直方向缩放倍数Fy ;预 置RGB565图像的目标地址首地址指针rgb和当前RGB565图像块存放的目标地址的指针p, 都定义成short*类型;预置缩放缓冲区,用于存放缩放后的YUV420图像块的Y分量、U分 量和V分量,分别由变量^、Ut和Vt引用;预置循环变量1、7、11、71、1、」,初始为0;预置 RGB565图像块输出坐标变量x2、y2 ;所述的YUV420图像的水平和垂直方向缩放倍数!7X = 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图像块存放的目标地址的指针ρ记录当前RGB565图像块存放的目标地址;为便于理解,以放大2倍为例说明,如图1所示为原始YUV420图像,原始YUV420图 像的高度和宽度分别为H、W,原始YUV420图像分成一个以上的原始YUV420图像块,如图1 中的原始YUV420图像块A、B、C,预置每个原始YUV420图像块的像素为虹4,即原始YUV420 图像块的高度和宽度都为4,每个图像块都为一个Y分量k,其中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为步进值步进。所述的循环变量xl、yl表示缩放后的YUV420图像 的水平和垂直方向坐标,在循环过程中,xl、yl分别以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、高度HI、缩放后的YUV420图像块的高 度ty和宽度tx、Y分量行距stride_s、U分量行距和V分量行距;计算RGB565图像的宽度 W2和目标地址的首地址rgb ;计算RGB565图像块的行距stride_d、偏移量offset和当前 RGB565图像块写入的目标地址ρ ;所述的缩放后的YUV420图像的宽度Wl和高度Hl为W1 = ff*Fx, Hl = H*Fy ;为便于理解,以放大2倍为例说明,如图1所示的原始YUV420图像放大2倍后,缩放后的YUV420图像的高度和宽度分别为2H和2W ;所述的缩放后的YUV420图像的Y分量行距strides是根据具体缩放倍数来,即 每行像素的个数;所述的缩放后的YUV420图像的U分量行距和V分量行距为strides的 二分之一;以放大2倍为例说明,Y分量行距Stride_S = 8,U分量行距和V分量行距为 stride_s的二分之一,即都为4 ;所述的计算RGB565图像的宽度W2的方法为如果旋转,则W2 = HLRGB565图像的宽度等于原始YUV420图像块的高度,缩放后 的YUV420图像的高度成为RGB565图像的宽度;如果不旋转,则W2 = Wl ;所述的RGB565图像块的行距stride_d的计算方法为stride_d = W2 ;为便于理 解,以放大2倍为例说明,Y分量行距strides = 8 ;所述的缩放后的YUV420图像块的高度ty和宽度tx为缩放后的YUV420图像块的 垂直方向和水平方向像素的个数;所述的计算RGB565图像的当前目标地址相对于图像首地址的偏移量offset具体 为如果旋转,offset= 0*W2+(W2_1);如果不旋转,则=Offset = 0 ;所述的offset为当前目标地址相对于图像首地址的偏移量;所述的RGB565图像的目标地址的首地址rgb为offsets ;所述的当前RGB565图像块存放的目标地址的指针p+ = offset*2 ;所述的RGB565图像的目标地址的首地址rgb、RGB565图像块地址偏移量offset 和当前RGB565图像块存放的目标地址的指针ρ这三者的关系是rgb是输出的RGB565图 像的首地址,只需要计算一次,offset是以像素为单位做偏移,rgb+offse讨2就得到了以 字节为偏移的当前RGB565图像块的输出地址P。每输出一个RGB565图像块,当前RGB565 图像块存放的目标地址的指针P都需要做偏移,即rgb+offse讨2 ;S703,判断是否7 <H,如果是,则进入步骤S704,如果否,则进入步骤S720 ;S704,判断是否1 < W,如果是,则进入步骤S706,如果否,则进入步骤S705 ;S705, y+ = (2*Ds_y),yl+ = (2*Ns_y),χ = 0,进入步骤 S703 ;S706,根据所述预置原始YUV420图像水平和垂直方向的缩放倍数,插值滤波生成 缩放后的YUV420图像块,并存到缩放缓冲区;其中缩放后YUV420图像块的宽度为tx,缩放后YUV420图像块的高度为ty ;为便于理解,以放大2倍为例说明,如图1,原始YUV420图像块A像素为虹4,如图 2所示,放大2倍后像素为8x8,y和yl以步进值y+= 4,yl+= 8步进,缩放后的数据存 在 YUV420_zoom_tmp [3]中,Yt = YUV420_zoom_tmp
,Ut = YUV420_zoom_tmp [1],Vt = YUV420_zoom_tmp [2],分别以^、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 = -yl, y2 = xl, ρ = & rgb [ (y2氺stride_d+x2)氺2];因为要旋转,缩放后的水平的YUV420图像块计算rgp值后按照垂直方向输出,缩 放后的垂直方向的YUV420图像块计算rgp值后按照水平方向输出,所以需要交换xl、yl ;为便于理解,以放大2倍为例说明,如图3为缩放后的YUV420图像块的前两个像 素包含的4个Y分量、1个U分量和1个V分量;S710,获取前两个像素的U分量和V分量,计算前两个像素的rgb值,分别写入p, y+ = 2,ρ+ = 2*stride_d, Ut++, Vt++ ;获取后两个像素的U分量和V分量,计算后两个像 素的 rgb 值,分别写入 p, y+ = 2, ρ+ = 2*stride_d,j = j—, Ut++, Vt++ ;为便于理解,以放大2倍为例说明,如图3所示,这里获取的U分量和V分量为Y 分量Yl、Y2、Y9、YlO所对应的Ul分量和Vl分量;所述的计算前两个像素的rgb值,写入ρ的方法具体为ρ
= get_rgbl6_value_clip_rgb (u, ν, y
);ρ [stride_d] = get_rgbl6_value_clip_rgb (u, ν, y[l]);ρ [-1] = get_rgbl6_value_clip_rgb (u, ν, y [stride_s+0]);ρ [_l+stride_d] = get_rgbl6_value_clip_rgb (u, ν, y [stride_s+l]);所述的get_rgbl6_value_clip_rgb()为外部函数,该外部函数完成YUV420到 rgb565的转换;为便于理解,以放大2倍为例说明,附、1 2、1 9、1 10输出的目标位置如图4所示,为 图3中YUV420对应的RGB565图像块旋转输出的目标位置;所述的y+ = 2 ;ρ+ = 2*stride_d 是 y 禾Π ρ 做偏移;所述的获取后2个像素的U分量和V分量,为便于理解,以放大2倍为例说明,如 图2所示,此时获取的U分量和V分量为Y分量TO、Y4、Y11、Y12所对应的U2分量和V2分 量;
位置;
15
所述的计算后两个像素的rgb值,分别写入ρ的过程为 ρ
= get_rgbl6_value_clip_rgb(u, ν, y
); ρ [stride_d] = get_rgbl6_value_clip_rgb (u, ν, y[l]); ρ [-1] = get_rgbl6_value_clip_rgb (u, ν, y [stride_s+0]); ρ [_l+stride_d] = get_rgbl6_value_clip_rgb (u, ν, y [stride_s+l]); 为便于理解,以放大2倍为例说明,如图4所示R3、R4、RlU R12写入目标地址的
S711,判断j是否等于0,如果是,则进入步骤S712,如果否,则进入步骤S710 ; S712, Yt+ = -tx+2*t_stride, ρ+ = -2-ff*stride_d, i = i—, j = tx/4 ; S713,判断i是否等于0,如果是,则进入步骤S719,如果否,则进入步骤S710 ; S714, x2 = xl, y2 = yl, ρ = & rgb [ (y2*stride_d+x2) *2];
S715,获取前两个像素的U分量和V分量,计算前两个像素的rgb值,分别写入p, y+ = 2,p+ = 2, Ut++, Vt++ ;获取后两个像素的U分量和V分量,计算后两个像素的rgb值, y+ = 2, ρ+ = 2, j = j—, Ut++, Vt++ ;为便于理解,以放大2倍为例说明,如图2所示,这里获取的U分量和V分量为Y 分量Y1、Y2、Y9、Y10所对应的Ul分量和Vl分量,计算后两个像素的rgb值,分别写入ρ ;图 5为图3中YUV420对应的RGB565图像块非旋转写入目标地址的结构图;所述的计算前两个像素的rgb值,分别写入p,具体为ρ
= get_rgbl6_value_clip_rgb (u, ν, y
);ρ [1] = get_rgbl6_value_clip_rgb (u, ν, y[l]);ρ [stride_d] = get_rgbl6_value_clip_rgb (u, ν, y [stride_s+0]);ρ [stride_d+l] = get_rgbl6_value_clip_rgb (u, ν, y [stride_s+l]);为便于理解,以放大2倍为例说明,如图5为图3中YUV420对应的RGB565图像块 Rl、R2、R9、RlO非旋转写入目标地址的位置;所述的获取后两个像素的U分量和V分量,为便于理解,以放大2倍为例说明,如 图2所示,此时获取的U分量和V分量为Y分量TO、Y4、Y11、Y12所对应的U2分量和V2分 量;所述的计算后两个像素的rgb值,分别写入P,具体为ρ
= get_rgbl6_value_clip_rgb (u, ν, y
);ρ [1] = get_rgbl6_value_clip_rgb (u, ν, y[l]);ρ [stride_d] = get_rgbl6_value_clip_rgb (u, ν, y [stride_s+0]);ρ [stride_d+l] = get_rgbl6_value_clip_rgb (u, ν, y [stride_s+l]);为便于理解,以放大2倍为例说明,如图5为图3中YUV420对应的RGB565图像块 R3、R4、Rl 1、R12非旋转写入目标地址的位置;S716,判断j = 0 ?如果是,则进入步骤S717,如果否,则进入步骤S715 ;S717, Yt+ = -tx+2*t_stride, ρ+ = -tx+2*stride_d, i = i—, j = tx/4 ;S718,判断i=0 如果是,则进入步骤S719,如果否,则进入步骤S715 ;S719, χ = x+(2*Ds_x),xl = xl+Q*Ns_x),进入步骤 S704 ;S720, RGB565图像输出结束。本实施例中通过预置六个循环变量和计算步进值,在一个相同的循环周期完成整 个原始YUV420图像转换成RGB565图像的过程,其中在转换过程中是通过先把原始YUV420 图像等分为原始YUV420图像块,对每个原始YUV420图像块进行缩放、颜色转换(即计算 rgb值),分别写入目标地址(包括旋转),减少了循环的次数和访问内存的数量,提高了转 换效率,输出的RGB565图像可以在不同像素的移动终端显示,通过把原始YUV420图像等分 为不同等分比例的原始YUV420图像块和不同的缩放比例,达到最佳的显示效果,减少内存 使用量,同时保持数据的局部性,加速内存访问速度。实施例三图8是本发明实施例一种YUV420图像转换成RGB565图像系统的总体结构示意 图。所述的系统包括初始模块、缩放模块、输出模块;
初始模块,与缩放模块相连,用于将原始的YUV420图像等分为一个或一个以上的 原始YUV420图像块;预置原始YUV420图像水平和垂直方向的缩放倍数;所述的YUV420图像的水平和垂直方向缩放倍数!7X = 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图像块的像素为虹4,即原始YUV420图 像块的高度和宽度都为4,每个图像块都为一个Y分量k,其中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_rgbl6_ 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图像的水平方向缩放倍 数h和垂直方向缩放倍数Fy ;预置RGB565图像的目标地址首地址指针rgb和当前RGB565 图像块存放的目标地址的指针P,都定义成short*类型;预置缩放缓冲区,用于存放缩放后 的YUV420图像块的Y分量、U分量和V分量,分别由变量Yt、Ut和Vt引用;预置循环变量 乂、又、11、71、丨、」,初始为0;预置1 8565图像块输出坐标变量x2、y2 ;计算缩放后的YUV420 图像的宽度W1、高度HI、缩放后的YUV420图像块的高度ty和宽度tx、Y分量行距stride_ s、U分量行距和V分量行距;计算RGB565图像的宽度W2和目标地址的首地址rgb ;计算 RGB565图像块的行距stride_d、偏移量offset和当前RGB565图像块写入的目标地址ρ ;所述的YUV420图像的水平和垂直方向缩放倍数!7X = 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图像块存放的目标地址的指针ρ记录当前RGB565图像块存放的目标地址;所述的循环变量x、y表示原始图像的水平和垂直方向的坐标,在循环过程中,x、y 分别以2*Ds_X、2*Ds_y为步进值步进。所述的循环变量xl、yl表示缩放后的YUV420图像 的水平和垂直方向坐标,在循环过程中,xl、yl分别以2*Ns_X、2*Ns_y为步进值步进;所述的RGB565图像块输出坐标变量x2、y2,表示的是RGB565图像块输出的水平 坐标和垂直坐标;所述的缩放后的YUV420图像的宽度Wl和高度Hl为W1 = ff*Fx, Hl = H*Fy ;所述的缩放后的YUV420图像的Y分量行距strides是根据具体缩放倍数来,即 每行像素的个数;所述的缩放后的YUV420图像的U分量行距和V分量行距为strides的 二分之一;以放大2倍为例说明,Y分量行距Stride_S = 8,U分量行距和V分量行距为 stride_s的二分之一,即都为4 ;所述的RGB565图像的宽度W2 = Hl,RGB565图像的宽度等于原始YUV420图像块 的高度,缩放后的YUV420图像的高度成为RGB565图像的宽度;所述的缩放后的YUV420图像块的高度ty和宽度tx为缩放后的YUV420图像块的 垂直方向和水平方向像素的个数;所述的RGB565图像块的当前目标地址相对于RGB565图像首地址的偏移量offset =0*W2+(W2-1);所述的offset为当前目标地址相对于RGB565图像首地址的偏移量;所述的RGB565图像的目标地址的首地址rgb为offsets ;所述的当前RGB565图像块存放的目标地址的指针p+ = offset*2 ;所述的RGB565图像的目标地址的首地址rgb、RGB565图像块的地址偏移量offset 和当前RGB图像块存放的目标地址的指针ρ这三者的关系是rgb是输出的RGB565图像的 首地址,只需要计算一次,offset是以像素为单位做偏移,rgb+offse讨2就得到了以字节 为偏移的当前RGB565图像块的输出地址P。每输出一个RGB565图像块,当前RGB565图像 块存放的目标地址的指针P都需要做偏移,即rgb+offse讨2 ;
第一判断模块,与初始模块、第二判断模块和步进模块相连,用于判断是否y < H, 如果是,则通知第二判断模块,如果否,则RGB565图像输出结束;第二判断模块,与第一判断模块、步进模块和缩放模块相连,用于判断是否χ < 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,ρ+ = 2*stride_d, j = j-, Ut++, Vt++,并通知第三判断模块进行判断;所述的输出模块在所述 的“获取缩放后的YUV420图像块的Y分量、U分量和V分量,计算rgb值,根据缩放后的 YUV420图像的尺寸与移动终端屏幕尺寸,确定是否旋转并分别将rgb值写入目标地址”之 前还用于如果旋转,则 x2 = -yl, y2 = χ ,ρ = & 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,具体为ρ
= get—rgbl6_value_clip—rgb (u,v,y
);ρ [stride_d] = get_rgbl6_value_clip_rgb (u, ν, y[l]);ρ [-1] = get_rgbl6_value_clip_rgb (u, ν, y [stride_s+0]);ρ [_l+stride_d] = get_rgbl6_value_clip_rgb (u, ν, y [stride_s+l]);所述的计算后两个像素的rgb值,并分别写入ρ具体为ρ
= get_rgbl6_value_clip_rgb (u, ν, y
);ρ [stride_d] = get_rgbl6_value_clip_rgb (u, ν, y[l]);ρ [-1] = get_rgbl6_value_clip_rgb (u, ν, y [stride_s+0]);ρ [_l+stride_d] = get_rgbl6_value_clip_rgb (u, ν, y [stride_s+l]);所述的get_rgbl6_value_clip_rgb()为外部函数,该外部函数完成YUV420到 rgb565的转换;第三判断模块,与输出模块和第四判断模块相连,用于判断j是否等于0,如果是, 则 Yt+ = -tx+2*t_stride,ρ+ = -2_W*stride_d,i = i—,j = tx/4 ;并通知第四判断模 块;如果否,通知输出模块;第四判断模块,与第三判断模块、输出模块和步进模块相连,用于判断i是否等于 0,如果是,则通知步进模块,并通知第二判断模块;如果否,则通知输出模块;步进模块,与第一判断模块、第二判断模块和第四判断模块相连,用于接收第二判 断模块的通知并y+ = (2*Ds_y),yl+ = (2*Ns_y),χ = 0,并通知第一判断模块;还用于接收第四判断模块发送的通知并χ = x+(2*Ds_x),Xl = xl+(2*Ns_x)。本实施例中通过第二判断模块和第四判断模块的判断结果,通知步进模块对循环 变量X、XI、1、Il进行步进,从而获取下一个原始YUV420图像块;通过第三判断模块和第 四判断模块的判断结果,通知输出模块计算当前两行的RGB图像块的rgb值并输出(包括 旋转);实现了在需要旋转的情况下,在同一个循环周期内完成整个YUV420图像到RGB565 图像的转换,减少了循环的次数和访问内存的数量,提高了转换效率,输出的RGB565图像 可以在不同像素的移动终端显示,通过把原始YUV420图像等分为不同等分比例的原始 YUV420图像块和不同的缩放比例,达到最佳的显示效果,减少内存使用量,同时保持数据的 局部性,加速内存访问速度。实施例五图9是本发明实施例一种YUV420图像转换成RGB565图像系统的具体结构图,本 实施例中的不需要做旋转操作。所述系统包括初始模块、第一判断模块、第二判断模块、缩放模块、输出模块、第 三判断模块、第四判断模块、步进模块;初始模块,与第一判断模块相连,用于预置原始YUV420图像的Y、U、V分量,原始 YUV420图像等分为一个或一个以上的YUV420图像块;预置YUV420图像的水平方向缩放倍 数h和垂直方向缩放倍数Fy ;预置RGB565图像的目标地址首地址指针rgb和当前RGB565 图像块存放的目标地址的指针P,都定义成short*类型;预置缩放缓冲区,用于存放缩放后 的YUV420图像块的Y分量、U分量和V分量,分别由变量Yt、Ut和Vt引用;预置循环变量 乂、又、11、71、丨、」,初始为0;预置1 8565图像块输出坐标变量x2、y2 ;计算缩放后的YUV420 图像的宽度W1、高度HI、缩放后的YUV420图像块的高度ty和宽度tx、Y分量行距stride_ s、U分量行距和V分量行距;计算RGB565图像的宽度W2和目标地址的首地址rgb ;计算 RGB565图像块的行距stride_d、偏移量offset和当前RGB565图像块写入的目标地址ρ ;所述的缩放后的YUV420图像的宽度Wl和高度Hl为W1 = ff*Fx, Hl = H*Fy ;所述的缩放后的YUV420图像的Y分量行距strides是根据具体缩放倍数确定, 即每行像素的个数;所述的缩放后的YUV420图像的U分量行距和V分量行距为strides 的二分之一;所述的RGB565图像的宽度W2 = Wl ;所述的RGB565图像的目标地址的首地址rgb为offsets ;所述的RGB565图像块的行距stride_d = W2 ;所述的缩放后的YUV420图像块的高度ty和宽度tx为缩放后的YUV420图像块的 垂直方向和水平方向像素的个数;所述的RGB565图像块的当前目标地址相对于图像首地址的偏移量offset = 0 ;所述的当前RGB565图像块存放的目标地址的指针p+ = offset*2 ;第一判断模块,与初始模块、第二判断模块和步进模块相连,用于判断是否y < H, 如果是,则通知第二判断模块,如果否,则RGB565图像输出结束;第二判断模块,与第一判断模块、步进模块和缩放模块相连,用于判断是否χ < W, 如果是,则通知缩放模块进行缩放,如果否,则通知步进模块;缩放模块,与第二判断模块和输出模块相连,用于根据所述预置原始YUV420图像水平和垂直方向的缩放倍数,插值滤波生成缩放后的YUV420图像块,并存到缩放缓冲区,i =ty/2,j = tx/4,并通知输出模块;输出模块,与缩放模块、第三判断模块和第四判断模块相连,用于接收缩放模块发 送的通知、第三判断模块发送的通知和第四判断模块发送的通知,获取前两个像素的U分 量和V分量,计算前两个像素的rgb值,分别写入p,y+ = 2,ρ+ = 2,Ut++, Vt++,获取后两 个像素的U分量和V分量,计算后两个像素的rgb值,y+ = 2,p+ = 2,j = j-, Ut++, Vt++, 并通知第三判断模块进行判断;所述的输出模块在所述的“获取缩放后的YUV420图像块的 Y分量、U分量和V分量,计算rgb值,根据缩放后的YUV420图像的尺寸与移动终端屏幕尺 寸,确定是否旋转并分别将rgb值写入目标地址”之前还用于如果不旋转,则x2 = xl,y2 = yl,ρ = & rgb[(y2*stride_d+x2)*2];所述的计算前两个像素的rgb值,并分别写入ρ具体为ρ
= get—rgbl6_value_clip—rgb (u,v,y
);ρ [1] = get—rgbl6_value_clip—rgb (u,v,y [1]);ρ [stride_d] = get_rgbl6_value_clip_rgb (u, ν, y [stride_s+0]);ρ [stride_d+l] = get_rgbl6_value_clip_rgb (u, ν, y [stride_s+l]);所述的计算后两个像素的rgb值,并分别写入ρ具体为ρ
= get—rgbl6_value_clip—rgb (u,v,y
);ρ [1] = get—rgbl6_value_clip—rgb (u,v,y [1]);ρ [stride_d] = get_rgbl6_value_clip_rgb (u, ν, y [stride_s+0]);ρ [stride_d+l] = get_rgbl6_value_clip_rgb (u, ν, y [stride_s+l]);第三判断模块,与输出模块和第四判断模块相连,用于判断j是否等于0,如果是, 则 Yt+ = -tx+2*t_stride,ρ+ = -tx+2*stride_d,i = i—,j = tx/4 ;并通知第四判断模 块;如果否,通知输出模块;第四判断模块,与第三判断模块、输出模块和步进模块相连,用于判断i是否等于 0,如果是,则通知步进模块,并通知第二判断模块;如果否,则通知输出模块;步进模块,与第一判断模块、第二判断模块和第四判断模块相连,用于接收第二判 断模块的通知并y+ = (2*Ds_y),yl+ = (2*Ns_y),χ = 0,并通知第一判断模块;还用于接 收第四判断模块发送的通知并χ = x+(2*Ds_x),xl = xl+(2*Ns_x)。本实施例中通过第二判断模块和第四判断模块的判断结果,通知步进模块对循环 变量x、xl、y、yl进行步进,从而获取下一个原始YUV420图像块;通过第三判断模块和第四 判断模块的判断结果,通知输出模块计算当前两行的RGB图像块的rgb值并输出;实现了在 不需要旋转的情况下,在同一个循环周期内完成整个YUV420图像到RGB565图像的转换,减 少了循环的次数和访问内存的数量,提高了转换效率,输出的RGB565图像可以在不同像素 的移动终端显示,通过把原始YUV420图像等分为不同等分比例的原始YUV420图像块和不 同的缩放比例,达到最佳的显示效果,减少内存使用量,同时保持数据的局部性,加速内存 访问速度。以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精 神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
权利要求
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、XI、yi、i、j,初始为0 ; 预置RGB565图像块输出坐标变量x2、y2 ;计算缩放后的YUV420图像的宽度W1、高度HI、缩放后的YUV420图像块的高度ty和宽 度tx、Y分量行距Stride一S、U分量行距和V分量行距;计算RGB565图像的宽度W2和目 标地址的首地址rgb ;计算RGB565图像块的行距stride_d、偏移量offset和当前RGB565 图像块写入的目标地址P;如果y < H且χ < W,则进入步骤“根据所述预置原始YUV420图像水平和垂直方向的 缩放倍数,插值滤波生成缩放后的YUV420图像块”;所述的步骤“获取缩放后的YUV420图像块的Y分量、U分量和V分量,计算rgb值,根 据缩放后的YUV420图像的尺寸与移动终端屏幕尺寸,确定是否旋转并分别将rgb值写入目 标地址”中旋转时写入目标地址的方法具体为所述的步骤“获取缩放后的YUV420图像块的Y分量、U分量和V分量,计算rgb值,根 据缩放后的YUV420图像的尺寸与移动终端屏幕尺寸,确定是否旋转并分别将rgb值写入目 标地址”之前还包括步骤 "i = ty/2,j = tx/4 ;x2 = -yl, y2 = xl, ρ = & rgb [ (y2*stride_d+x2) *2],,;所述的步骤“获取缩放后的YUV420图像块的Y分量、U分量和V分量,计算rgb值,根 据缩放后的YUV420图像的尺寸与移动终端屏幕尺寸,确定是否旋转并分别将rgb值写入目 标地址”分为两个步骤为“获取前两个像素的U分量和V分量,计算前两个像素的rgb值,分别写入目标地址,y+ =2, ρ+ = 2*stride_d, Ut++, Vt++ ;获取后两个像素的U分量和V分量,计算后两个像素的rgb值,分别写入目标地址,y+ =2,ρ+ = 2氺stride_d,j = j—, Ut++, Vt++";所述的步骤“获取后两个像素的U分量和V分量,计算后两个像素的rgb值,分别写入目标地址,y+ = 2,ρ+ = 2*stride_d,j = j—,Ut++, Vt++” 之后包括步骤“如果 j 等于 0,则 Yt+ = -tx+2*t_stride,ρ+ = -2_W*stride_d,i = i—,j = tx/4 ; 如果 i 等于 0,则 χ = x+(2*Ds_x),xl = xl+(2*Ns_x); 如果 χ 不小于 W,则 y+ = (2*Ds_y),yl+ = (2*Ns_y),χ = 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值,分别写入 目标地址”具体为ρ
= get—rgbl6—value—clip—rgb (u,ν, y
); ρ [stride_d] = get—rgbl6_value_clip—rgb (u,v,y [1]); ρ [-1] = get—rgbl6_value_clip—rgb (u,v,y [stride_s+0]); ρ [_l+stride_d] = get_rgbl6_value_clip_rgb (u, v, y [stride_s+l]); 所述的步骤“获取后两个像素的υ分量和V分量,计算后两个像素的rgb值,分别写入 目标地址”具体为ρ
= get_rgbl6_value_clip_rgb (u, ν, y
); ρ [stride_d] = get_rgbl6_value_clip_rgb (u, ν, y[l]); ρ [-1] = get_rgbl6_value_clip_rgb (u, ν, y [stride_s+0]); ρ [_l+stride_d] = get_rgbl6_value_clip_rgb (u, ν, y [stride_s+l])。
4.如权利要求2所述的YUV420图像转换成RGB565图像的方法,其特征在于,所述的步骤“如果 j 等于 0,则 Yt+ = -tx+2*t_stride,p+ = -2-ff*stride_d, i = i—, j = tx/4”之后还包括步骤“如果j不等于0,则进入步骤“获取缩放后的YUV420图像块的 Y分量、U分量和V分量,计算rgb值,根据缩放后的YUV420图像的尺寸与移动终端屏幕尺 寸,确定是否旋转并分别将rgb值写入目标地址”;所述的步骤“如果i等于0,则χ = x+(2*Ds_x),xl = xl+(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引用;预置循环变量χ、y、xl、yl、i、j,初始为0 ;预置RGB565图像块输出坐标变量x2、y2 ;计算缩放后的YUV420图像的宽度W1、高度HI、缩放后的YUV420图像块的高度ty和宽 度tx、Y分量行距stride_s、U分量行距和V分量行距;计算RGB565图像的宽度W2和目标 地址的首地址rgb ;计算RGB565图像块的行距stride_d、偏移量offset和当前RGB565图 像块写入的目标地址P;如果y < H且χ < W,则进入步骤“根据所述预置原始YUV420图像水平和垂直方向的 缩放倍数,插值滤波生成缩放后的YUV420图像块”;所述的步骤“获取缩放后的YUV420图像块的Y分量、U分量和V分量,计算rgb值,根 据缩放后的YUV420图像的尺寸与移动终端屏幕尺寸,确定是否旋转并分别将rgb值写入目 标地址”中不需要旋转时写入目标地址的方法具体为所述的步骤“获取缩放后的YUV420图像块的Y分量、U分量和V分量,计算rgb值,根 据缩放后的YUV420图像的尺寸与移动终端屏幕尺寸,确定是否旋转并分别将rgb值写入目 标地址”之前还包括步骤 "i = ty/2,j = tx/4 ;x2 = xl, y2 = yl, ρ = & rgb [ (y2*stride_d+x2) *2],,;所述的步骤“获取缩放后的YUV420图像块的Y分量、U分量和V分量,计算rgb值,根 据缩放后的YUV420图像的尺寸与移动终端屏幕尺寸,确定是否旋转并分别将rgb值写入目 标地址”分为两个步骤为“获取前两个像素的U分量和V分量,计算前两个像素的rgb值,分别写入目标地址,y+ =2, ρ+ = 2, Ut++, Vt++ ;获取后两个像素的U分量和V分量,计算后两个像素的rgb值,分别写入目标地址,y+ =2,ρ+ = 2,j = j—, Ut++, Vt++";所述的步骤“获取后两个像素的U分量和V分量,计算后两个像素的rgb值,分别写入 目标地址,y+ = 2,ρ+ = 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+(2*Ds_x),xl = xl+(2*Ns_x); 如果 χ 不小于 W,则 y+ = (2*Ds_y),yl+ = (2*Ns_y),χ = 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值,分别写入目标地址”具 体为ρ
= get—rgbl6—value—clip—rgb (u,ν, y
);ρ [1] = get—rgbl6—value—clip—rgb (u,v,y [1]);ρ [stride_d] = get_rgbl6_value_clip_rgb (u, v, y [stride_s+0]);ρ [stride_d+l] = get_rgbl6_value_clip_rgb (u, v, y [stride_s+l]);所述的步骤“获取后两个像素的υ分量和V分量,计算后两个像素的rgb值,分别写入目标地址”具体为ρ
= get_rgbl6_value_clip_rgb (u, ν, y
)); ρ [1] = get_rgbl6_value_clip_rgb (u, ν, y[l])); ρ [stride_d] = get_rgbl6_value_clip_rgb (u, ν, y [stride_s+0]); ρ [stride_d+l] = get_rgbl6_value_clip_rgb (u, v, y [stride_s+l])。
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+(2*Ds_x),xl = xl+(2*Ns_x) ”还包括步骤“如果 i不等于0,则进入步骤“获取缩放后的YUV420图像块的Y分量、U分量和V分量,计算rgb 值,根据缩放后的YUV420图像的尺寸与移动终端屏幕尺寸,确定是否旋转并分别将rgb值 写入目标地址”。
8.如权利要求2所述的YUV420图像转换成RGB565图像的方法,其特征在于, 所述的缩放后的YUV420图像的宽度Wl和高度Hl为W1 = ff*Fx, Hl = H*Fy ;所述的缩放后的YUV420图像的Y分量行距strides是根据具体缩放倍数确定,即每 行像素的个数;所述的缩放后的YUV420图像的U分量行距和V分量行距为strides的二 分之一;所述的RGB565图像的宽度W2 = Hl ;所述的RGB565图像的目标地址的首地址rgb为offsets ;所述的RGB565图像块的行距stride_d = W2 ;所述的缩放后的YUV420图像块的高度ty和宽度tx为缩放后的YUV420图像块的垂直 方向和水平方向像素的个数;所述的RGB565图像块的当前目标地址相对于图像首地址的偏移量offset = 0*W2+(W2-1);所述的当前RGB565图像块存放的目标地址的指针ρ+ = offse讨2。
9.如权利要求5所述的YUV420图像转换成RGB565图像的方法,其特征在于, 所述的缩放后的YUV420图像的宽度Wl和高度Hl为W1 = ff*Fx, Hl = H*Fy ;所述的缩放后的YUV420图像的Y分量行距strides是根据具体缩放倍数确定,即每 行像素的个数;所述的缩放后的YUV420图像的U分量行距和V分量行距为strides的二 分之一;所述的RGB565图像的宽度W2 = Wl ;所述的RGB565图像的目标地址的首地址rgb为offsets ;所述的RGB565图像块的行距stride_d = W2 ;所述的缩放后的YUV420图像块的高度ty和宽度tx为缩放后的YUV420图像块的垂直 方向和水平方向像素的个数;所述的RGB565图像块的当前目标地址相对于图像首地址的偏移量offset = 0 ; 所述的当前RGB565图像块存放的目标地址的指针ρ+ = offse讨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引用;预置循环变量χ、y、xl、yl、 i、j,初始为0 ;预置RGB565图像块输出坐标变量x2、y2 ;计算缩放后的YUV420图像的宽度 W1、高度HI、缩放后的YUV420图像块的高度ty和宽度tx、Y分量行距stride_s、U分量行 距和V分量行距;计算RGB565图像的宽度W2和目标地址的首地址rgb ;计算RGB565图像 块的行距stride_d、偏移量offset和当前RGB565图像块写入的目标地址ρ ;所述的第一判断模块与初始模块、第二判断模块和步进模块相连,用于判断是否y<H,如果是,则通知第二判断模块,如果否,则RGB565图像输出结束;所述的第二判断模块与第一判断模块、步进模块和缩放模块相连,用于判断是否χ<W,如果是,则通知缩放模块进行缩放,如果否,则通知步进模块;所述的缩放模块还用于i = ty/2,j = tx/4,并通知输出模块; 所述的输出模块在“获取缩放后的YUV420图像块的Y分量、U分量和V分量,计算rgb 值,根据缩放后的YUV420图像的尺寸与移动终端屏幕尺寸,确定是否旋转并分别将rgb 值写入目标地址”之前还用于如果旋转,则x2 = -yl, y2 = xl, ρ = & rgb [ (y2*stride_ d+x2)*2];所述的输出模块中所述的“获取缩放后的YUV420图像块的Y分量、U分量和V分量,计 算rgb值,根据缩放后的YUV420图像的尺寸与移动终端屏幕尺寸,确定是否旋转并分别将 rgb值写入目标地址”具体为获取前两个像素的U分量和V分量,计算前两个像素的rgb值,分别写入目标地址,具 体为ρ
= get—rgbl6—value—clip—rgb (u,ν, y
); ρ [stride_d] = get—rgbl6_value_clip—rgb (u,v,y [1]); ρ [-1] = get—rgbl6_value_clip—rgb (u,v,y [stride_s+0]); ρ [_l+stride_d] = get_rgbl6_value_clip_rgb (u, v, y [stride_s+l]); y+ = 2,ρ+ = 2*stride_d,Ut++, Vt++ ;获取后两个像素的U分量和V分量,计算后两个像素的rgb值,分别写入目标地址,具体为ρ
= get_rgbl6_value_clip_rgb (u, ν, y
); ρ [stride_d] = get_rgbl6_value_clip_rgb (u, ν, y[l]); ρ [-1] = get_rgbl6_value_clip_rgb (u, ν, y [stride_s+0]); ρ [_l+stride_d] = get_rgbl6_value_clip_rgb (u, ν, y [stride_s+l]); y+ = 2, ρ+ = 2氺stride_d, j = j—, Ut++, Vt++ ;所述的第三判断模块与输出模块和第四判断模块相连,用于判断j是否等于0,如果 是,贝丨J Yt+ = -tx+2*t_stride,ρ+ = -2_W*stride_d,i = i—,j = tx/4 ;并通知第四判断 模块;如果否,通知输出模块;所述的第四判断模块与第三判断模块、输出模块和步进模块相连,用于判断i是否等 于0,如果是,则通知步进模块,并通知第二判断模块;如果否,则通知输出模块;所述的步进模块与第一判断模块、第二判断模块和第四判断模块相连,用于接收第二 判断模块的通知并y+ = (2*Ds_y),yl+ = (2*Ns_y),χ = 0,并通知第一判断模块;还用于 接收第四判断模块发送的通知并χ = x+(2*Ds_x),Xl = xl+(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引用;预置循环变量χ、y、xl、yl、 i、j,初始为0 ;预置RGB565图像块输出坐标变量x2、y2 ;计算缩放后的YUV420图像的宽度 W1、高度HI、缩放后的YUV420图像块的高度ty和宽度tx、Y分量行距stride_s、U分量行 距和V分量行距;计算RGB565图像的宽度W2和目标地址的首地址rgb ;计算RGB565图像 块的行距stride_d、偏移量offset和当前RGB565图像块写入的目标地址ρ ;所述的第一判断模块与初始模块、第二判断模块和步进模块相连,用于判断是否y<H,如果是,则通知第二判断模块,如果否,则RGB565图像输出结束;所述的第二判断模块与第一判断模块、步进模块和缩放模块相连,用于判断是否χ<W,如果是,则通知缩放模块进行缩放,如果否,则通知步进模块;所述的缩放模块还用于i = ty/2,j = tx/4,并通知输出模块; 所述的输出模块在“获取缩放后的YUV420图像块的Y分量、U分量和V分量,计算rgb 值,根据缩放后的YUV420图像的尺寸与移动终端屏幕尺寸,确定是否旋转并分别将rgb值 写入目标地址”之前还用于如果不需要旋转,则x2 = xl,y2 = yl,p = & rgb [ (y2*stride_ d+x2)*2];所述的输出模块中所述的“获取缩放后的YUV420图像块的Y分量、U分量和V分量,计 算rgb值,根据缩放后的YUV420图像的尺寸与移动终端屏幕尺寸,确定是否旋转并分别将 rgb值写入目标地址”具体为“获取前两个像素的U分量和V分量,计算前两个像素的rgb值,分别写入目标地址”具 体为ρ
= get—rgbl6—value—clip—rgb (u,ν, y
); ρ [1] = get—rgbl6—value—clip—rgb (u,v,y [1]); ρ [stride_d] = get_rgbl6_value_clip_rgb (u, v, y [stride_s+0]); ρ [stride_d+l] = get_rgbl6_value_clip_rgb (u, v, y [stride_s+l]); y+ = 2,ρ+ = 2,Ut++, Vt++ ;获取后两个像素的U分量和V分量,计算后两个像素的rgb值,分别写入目标地址,具 体为ρ
= get_rgbl6_value_clip_rgb (u, ν, y
); ρ [1] = get_rgbl6_value_clip_rgb (u, ν, y[l]); ρ [stride_d] = get_rgbl6_value_clip_rgb (u, ν, y [stride_s+0]); ρ [stride_d+l] = get_rgbl6_value_clip_rgb (u, ν, y [stride_s+l]); y+ = 2, ρ+ = 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),yl+ = (2*Ns_y),χ = 0,并通知第一判断模块;还用于 接收第四判断模块的通知,并对χ = x+(2*Ds_x),Xl = xl+(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图像的宽度Wl和高度Hl为W1 = ff*Fx, Hl = H*Fy ;所述的缩放后的YUV420图像的Y分量行距strides是根据具体缩放倍数确定,即每 行像素的个数;所述的缩放后的YUV420图像的U分量行距和V分量行距为strides的二 分之一;所述的RGB565图像的宽度W2 = Hl ;所述的RGB565图像的目标地址的首地址rgb为offsets ;所述的RGB565图像块的行距stride_d = W2 ;所述的缩放后的YUV420图像块的高度ty和宽度tx为缩放后的YUV420图像块的垂直 方向和水平方向像素的个数;所述的RGB565图像块的当前目标地址相对于图像首地址的偏移量offset = 0*W2+(W2-1);所述的当前RGB565图像块存放的目标地址的指针ρ+ = offse讨2。
14.如权利要求12所述的YUV420图像转换成RGB565图像的系统,其特征在于,所述的缩放后的YUV420图像的宽度Wl和高度Hl为W1 = ff*Fx, Hl = H*Fy ; 所述的缩放后的YUV420图像的Y分量行距strides是根据具体缩放倍数确定,即每 行像素的个数;所述的缩放后的YUV420图像的U分量行距和V分量行距为strides的二 分之一;所述的RGB565图像的宽度W2 = Wl ;所述的RGB565图像的目标地址的首地址rgb为offsets ;所述的RGB565图像块的行距stride_d = W2 ;所述的缩放后的YUV420图像块的高度ty和宽度tx为缩放后的YUV420图像块的垂直 方向和水平方向像素的个数;所述的RGB565图像块的当前目标地址相对于图像首地址的偏移量offset = 0 ; 所述的当前RGB565图像块存放的目标地址的指针ρ+ = offse讨2。
全文摘要
本发明公开一种YUV420图像转换成RGB565图像的方法和系统,通过把原始YUV420图像等分为原始YUV420图像块并进行缩放,获取缩放后的YUV420图像块的U分量和V分量,计算rgb值,根据YUV420图像的尺寸与移动终端屏幕尺寸确定是否旋转分别将rgb值写入目标地址,从而实现对每个原始YUV420图像块连续做缩放、计算rgb值并输出(含旋转),减少了循环的次数和访问内存的数量,提高了转换效率,输出的RGB565图像可以在不同像素的移动终端显示,通过把原始YUV420图像等分为不同等分比例的原始YUV420图像块和不同的缩放比例,达到最佳的显示效果,加速内存访问速度。
文档编号G06T3/40GK102073987SQ20101061618
公开日2011年5月25日 申请日期2010年12月30日 优先权日2010年12月30日
发明者张磊, 邓邹平 申请人:深圳市融创天下科技发展有限公司