西西软件园多重安全检测下载网站、值得信赖的软件下载站!
软件
软件
文章
搜索

首页编程开发其它知识 → 非整数倍率YUV422图像的自由缩放算法

非整数倍率YUV422图像的自由缩放算法

相关软件相关文章发表评论 来源:本站整理时间:2010/11/28 15:34:51字体大小:A-A+

作者:佚名点击:330次评论:1次标签: 自由缩放 倍率 图片压缩

  • 类型:图像处理大小:684KB语言:中文 评分:5.0
  • 标签:
立即下载

下面的代码,实现将一幅YUV422的双通道图片(640x480大小),取中间区域(560x400大小)使用插值的办法放大至(640x480)。这个算法可以用来实现将图片外围区域截掉。

#define X_RATIO (8)
#define Y_RATIO (6)

PUBLIC void YUVScale(JINF_YUV_CHN_T *const yuv_ptr,const uint32 Width,const uint32 Height)
{
uint8  *const src_y_ptr = (uint16 *)yuv_ptr->y_chn_ptr;
uint8  *const src_uv_ptr = (uint16 *)yuv_ptr->u_chn_ptr;

uint32  x,y,w,h=0,xl,yl,dx,dy;

if ((Width%(X_RATIO<<1)!=0)||(Height%(Y_RATIO<<1)!=0))
{
TRACE("%s Width=%d,Height=%d",__func__,Width,Height);
return;
}

ASSERT(PNULL != yuv_ptr);

xl=(Width-(Width/X_RATIO))>>1;
yl=(Height-(Height/Y_RATIO))>>1;

dx=Width / (X_RATIO<<1);
dy=Height / (Y_RATIO<<1);

for (y=0; y<yl; y++,h++)
{
w = 0;

for (x=0; x<xl; x+=2,w+=2)
{
CopyPixel:
//2 Quadrant 2
src_y_ptr[h*Width+w] = src_y_ptr[(dy+y)*Width+dx+x];
src_y_ptr[h*Width+w+1] = src_y_ptr[(dy+y)*Width+dx+x+1];
src_uv_ptr[h*Width+w] = src_uv_ptr[(dy+y)*Width+dx+x];
src_uv_ptr[h*Width+w+1] = src_uv_ptr[(dy+y)*Width+dx+x+1];
//2 Quadrant 1
src_y_ptr[h*Width+(Width-w-1)] = src_y_ptr[(dy+y)*Width+(Width-dx-x-1)];
src_y_ptr[h*Width+(Width-w-2)] = src_y_ptr[(dy+y)*Width+(Width-dx-x-2)];
src_uv_ptr[h*Width+(Width-w-1)] = src_uv_ptr[(dy+y)*Width+(Width-dx-x-1)];
src_uv_ptr[h*Width+(Width-w-2)] = src_uv_ptr[(dy+y)*Width+(Width-dx-x-2)];
//2 Quadrant 4
src_y_ptr[(Height-h-1)*Width+(Width-w-1)] = src_y_ptr[(Height-dy-y-1)*Width+(Width-dx-x-1)];
src_y_ptr[(Height-h-1)*Width+(Width-w-2)] = src_y_ptr[(Height-dy-y-1)*Width+(Width-dx-x-2)];
src_uv_ptr[(Height-h-1)*Width+(Width-w-1)] = src_uv_ptr[(Height-dy-y-1)*Width+(Width-dx-x-1)];
src_uv_ptr[(Height-h-1)*Width+(Width-w-2)] = src_uv_ptr[(Height-dy-y-1)*Width+(Width-dx-x-2)];
//2 Quadrant 3
src_y_ptr[(Height-h-1)*Width+w] = src_y_ptr[(Height-dy-y-1)*Width+dx+x];
src_y_ptr[(Height-h-1)*Width+w+1] = src_y_ptr[(Height-dy-y-1)*Width+dx+x+1];
src_uv_ptr[(Height-h-1)*Width+w] = src_uv_ptr[(Height-dy-y-1)*Width+dx+x];
src_uv_ptr[(Height-h-1)*Width+w+1] = src_uv_ptr[(Height-dy-y-1)*Width+dx+x+1];

if (
((w+2) % (X_RATIO<<1))==
((X_RATIO<<1)-2)
)
{
w+=2;
goto CopyPixel;
}
}

if (((h+1) % (Y_RATIO))==(Y_RATIO-1))
{
h++;

memcpy(src_y_ptr+h*Width,src_y_ptr+(h-1)*Width,Width);
memcpy(src_uv_ptr+h*Width,src_uv_ptr+(h-1)*Width,Width);

memcpy(src_y_ptr+(Height-h-1)*Width,src_y_ptr+(Height-h)*Width,Width);
memcpy(src_uv_ptr+(Height-h-1)*Width,src_uv_ptr+(Height-h)*Width,Width);
}
}
}


编写这个算法的好处是,在不改变图片原始大小的情况下去除照片的边框。

    相关评论

    阅读本文后您有什么感想? 已有人给出评价!

    • 8 喜欢喜欢
    • 3 顶
    • 1 难过难过
    • 5 囧
    • 3 围观围观
    • 2 无聊无聊

    热门评论

    最新评论

    发表评论 查看所有评论(1)

    昵称:
    表情: 高兴 可 汗 我不要 害羞 好 下下下 送花 屎 亲亲
    字数: 0/500 (您的评论需要经过审核才能显示)