- 9
- 0
- 约5.4万字
- 约 56页
- 2022-06-29 发布于上海
- 举报
图像缩放算法
摘要:首先给出一个基本的图像缩放算法,然后一步一步的优化其速度和缩放质量;
高质量的快速的图像缩放 全文 分为: 上篇 近邻取样插值和其速度优化
中篇 二次线性插值和三次卷积插值下篇 三次线性插值和 MipMap 链
正文:
为了便于讨论,这里只处理 32bit 的 ARGB 颜色;
代码使用 C++;涉及到汇编优化的时候假定为 x86 平台;使用的编译器为 vc2005;
为了代码的可读性,没有加入异常处理代码;
测试使用的 CPU 为 AMD64x2 4200+(2.37G) 和 Intel Core2 4400(2.00G);
速度测试说明:
只测试内存数据到内存数据的缩放
测试图片都是 800*600 缩放到 1024*768; fps 表示每秒钟的帧数,值越大表示函数越快
////////////////////////////////////////////////////////////////////////
////////
//Windows GDI 相关函数参考速度:
//======================================================================
========
//
BitBlt
544.7
fps
//is
copy
800*600 to 800*600
//
BitBlt
331.6
fps
//is
copy
1024*1024 to 1024*1024
//
StretchBlt
232.7
fps
//is
zoom
800*600 to 1024*1024
////////////////////////////////////////////////////////////////////////
////////
A: 首先定义图像数据结构:
#define asm asm
typedef unsigned char TUInt8; // [0..255] struct TARGB32 //32 bit color
{
TUInt8 B,G,R,A; // A is alpha
};
struct TPicRegion //一块颜色数据区的描述,便于参数传递
{
TARGB32*
pdata;
//颜色数据首地址
long
byte_width;
//一行数据的物理宽度(字节宽度);
//abs(byte_width)有可能大于等于 width*sizeof(TARGB32); long width; //像素宽度
long height; //像素高度
};
//那么访问一个点的函数可以写为:
inline TARGB32 Pixels(const TPicRegion pic,const long x,const long y)
{
return ( (TARGB32*)((TUInt8*)pic.pdata+pic.byte_width*y) )[x];
}
B: 缩放原理和公式图示:
缩放后图片 原图片
(宽 DW,高 DH) (宽 SW,高 SH)
(Sx-0)/(SW-0)=(Dx-0)/(DW-0) (Sy-0)/(SH-0)=(Dy-0)/(DH-0)
= Sx=Dx*SW/DW Sy=Dy*SH/DH C: 缩放算法的一个参考实现
//给出一个最简单的缩放函数(插值方式为近邻取样,而且我“尽力”把它写得慢一些了:D)
//Src.PColorData 指向源数据区,Dst.PColorData 指向目的数据区
//函数将大小为 Src.Width*Src.Height 的图片缩放到 Dst.Width*Dst.Height 的区域中
void
void PicZoom0(const TPicRegion Dst,const TPicRegion Src)
{
if ( (0==Dst.width)||(0==Dst.height)
||(0==Src.width)||(0==Src.height)) return; for (long x=0;xDst.width;++x)
{
for (long y=0;yDst.height;++y)
{
long srcx=(x*Src.width/Dst.width); long srcy=(y*Src.height/Dst.height); Pixels(Dst,x,y)=Pixels(Src,srcx,srcy);
}
}
}
////////////////////////////////////////////////////////////////////////
////////
//速度测试:
//================
您可能关注的文档
- 同桌,对不起!分析和总结.docx
- 砼方案.doc誉耀车间二.docx
- 砼支撑拆除方案.docx
- 童话里的现实.docx
- 童年作文800字分析和总结.docx
- 酮的性质分析和总结.docx
- 统编版五年级语文上册补充习题答案.docx
- 统计案例试题及答案.docx
- 统计抽样计算题(有计算过程).docx
- 统计的简单应用.docx
- 《GB 19079.4-2025体育场所开放条件与技术要求 第4部分:攀岩场所》.pdf
- GB/T 46918.1-2025微细气泡技术 水中微细气泡分散体系气体含量的测量方法 第1部分:氧气含量.pdf
- 中国国家标准 GB/T 46918.1-2025微细气泡技术 水中微细气泡分散体系气体含量的测量方法 第1部分:氧气含量.pdf
- 《GB/T 46918.1-2025微细气泡技术 水中微细气泡分散体系气体含量的测量方法 第1部分:氧气含量》.pdf
- 中国国家标准 GB 19079.4-2025体育场所开放条件与技术要求 第4部分:攀岩场所.pdf
- 《GB/T 44807.2-2025集成电路电磁兼容建模 第2部分:集成电路电磁干扰特性仿真模型 传导发射建模(ICEM-CE)》.pdf
- GB/T 44807.2-2025集成电路电磁兼容建模 第2部分:集成电路电磁干扰特性仿真模型 传导发射建模(ICEM-CE).pdf
- 中国国家标准 GB/T 44807.2-2025集成电路电磁兼容建模 第2部分:集成电路电磁干扰特性仿真模型 传导发射建模(ICEM-CE).pdf
- GB/T 19405.4-2025表面安装技术 第4部分:湿敏器件的处理、标记、包装和分类.pdf
- 中国国家标准 GB/T 19405.4-2025表面安装技术 第4部分:湿敏器件的处理、标记、包装和分类.pdf
最近下载
- 基于数字疗法的行为改变理论应用分析.pdf VIP
- 星空纹理文艺小清新毕业论文开题答辩通用PPT模板.pdf VIP
- 东风d内燃机车电传动基础.pptx VIP
- 行政法理论考核试题及答案.docx VIP
- 中国历史地图集 辽北宋时期图.pdf VIP
- df12内燃机车电传动课件.pptx VIP
- 2025-2026年民主生活会个人发言提纲(带头固本培元、增强党性方面五个带头)8篇.docx VIP
- 年综合处理2万吨硅基太阳能光伏组件的回收和预处理项目环评资料环境影响.doc VIP
- 即梦AI+剪映AI+DeepSeek:绘画和短视频课件 即梦AI+剪映AI+DeepSeek:绘画和短视频 第9章 综合实例.pptx
- 2025年税务智能客服行业技术发展与应用报告.docx VIP
原创力文档

文档评论(0)