windows mobile 上面固定比例图像缩放
最近一段时间太忙,上篇博客说是把图像缩放的算法放上来,今天放上来。这个算法参考的是线性插值法来实现,也就是最简单的方法,在手机上面受cpu计算能力的限制还有对图片质量要求不高,所以采用这种算法。如果需要高质量的话请搜索滤波像素重采样。这个代码输入和输入的都是像素矩阵,大家在图像操作的时候应该都是会转换成的。如果需要全套代码可以mail我(jessz@live.com)或者留言在这里,我会把整个dib.cpp文件发给你,他包括图像解码,缩放,图片保存之类的操作。
// // 功能: 根据固定比例缩放算法 // add by jessezhao / void CDib::PicZoomFixSize( const TPicRegion& Dst,const TPicRegion& Src ) { if ((0==Dst.width)||(0==Dst.height)||(0==Src.width)||(0==Src.height)) return; // 根据高宽比确认一个最好的缩放比例double dWidth = IMAGE_OPTION_WIDTH;double dHeight = IMAGE_OPTION_HIGHT;double dAspectRatio = (double)((double)dWidth/(double)dHeight);double dPictureWidth = Src.width;double dPictureHeight = Src.height;double dPictureAspectRatio = (double)((double)dPictureWidth/(double)dPictureHeight); int nCenteringFactor=0;int nNewHeight = 0;int nNewWidth = 0;if (dPictureAspectRatio > dAspectRatio){nNewHeight = (int)(dWidth/dPictureWidth*dPictureHeight);nCenteringFactor = (IMAGE_OPTION_HIGHT - nNewHeight) / 2;}else if (dPictureAspectRatio < dAspectRatio){nNewWidth = (int)(dHeight/dPictureHeight*dPictureWidth);nCenteringFactor = (IMAGE_OPTION_WIDTH - nNewWidth) / 2;} // 高度合适if (nNewWidth != 0){unsigned long xrIntFloat_16=(Src.width<<16)/nNewWidth+1; unsigned long yrIntFloat_16=(Src.height<<16)/Dst.height+1;unsigned long dst_width=nNewWidth;TARGB32* pDstLine=Dst.pdata;unsigned long srcy_16=0;for (unsigned long y=0;y<Dst.height;++y){TARGB32* pSrcLine=((TARGB32*)((TUInt8*)Src.pdata+Src.byte_width*(srcy_16>>16)));unsigned long srcx_16=0;for (unsigned long x=0;x<nNewWidth;++x){//nCenteringFactor调整在目标图中开始写入的位置pDstLine[x+nCenteringFactor]=pSrcLine[srcx_16>>16];srcx_16+=xrIntFloat_16;}srcy_16+=yrIntFloat_16;((TUInt8*&)pDstLine)+=Dst.byte_width;}}//宽度合适else if (nNewHeight!=0){unsigned long xrIntFloat_16=(Src.width<<16)/Dst.width+1; unsigned long yrIntFloat_16=(Src.height<<16)/nNewHeight+1;unsigned long dst_width=Dst.width;TARGB32* pDstLine=Dst.pdata;unsigned long srcy_16=0; //nCenteringFactor调整在目标图中开始写入的位置((TUInt8*&)pDstLine)+=Dst.byte_width*nCenteringFactor; for (unsigned long y=0;y<nNewHeight;++y){TARGB32* pSrcLine=((TARGB32*)((TUInt8*)Src.pdata+Src.byte_width*(srcy_16>>16)));unsigned long srcx_16=0;for (unsigned long x=0;x<dst_width;++x){pDstLine[x]=pSrcLine[srcx_16>>16];srcx_16+=xrIntFloat_16;}srcy_16+=yrIntFloat_16;((TUInt8*&)pDstLine)+=Dst.byte_width;}}//长宽等比例缩放符合屏幕比例else{unsigned long xrIntFloat_16=(Src.width<<16)/Dst.width+1; unsigned long yrIntFloat_16=(Src.height<<16)/Dst.height+1;unsigned long dst_width=Dst.width;TARGB32* pDstLine=Dst.pdata;unsigned long srcy_16=0; for (unsigned long y=0;y<Dst.height;++y){TARGB32* pSrcLine=((TARGB32*)((TUInt8*)Src.pdata+Src.byte_width*(srcy_16>>16)));unsigned long srcx_16=0;for (unsigned long x=0;x<dst_width;++x){pDstLine[x]=pSrcLine[srcx_16>>16];srcx_16+=xrIntFloat_16;}srcy_16+=yrIntFloat_16;((TUInt8*&)pDstLine)+=Dst.byte_width;}} }
windows mobile 上面固定比例图像缩放相关推荐
- ArcEngine中的地图缩放相关的常用操作以及固定比例放大缩小
资料1: 这两个功能,和全图一样简单,也是继承CommandBase基类 public override void OnClick(){//Get IEnvelope interfaceIEnvelo ...
- 图形图像处理-之-高质量的快速的图像缩放 中篇 二次线性插值和三次卷积插值
from:http://blog.csdn.net/housisong/article/details/1452249 图形图像处理-之-高质量的快速的图像缩放 中篇 二次线性插值和三次卷积插值 ...
- 图形图像处理 —— 图像缩放算法
转自:http://blog.chinaunix.net/space.php?uid=22915173&do=blog&id=2185545 摘要:首先给出一个基本的图像缩放算法,然后 ...
- 几个图像缩放算法的比较
几个图像缩放算法的比较 前段时间由于项目的需求,需要实现图像的缩放功能,期间查找了不少关于图像缩放算法的资料,现把自己的心得整理一下. 由于研究生期间没有选修过图像处理方面的课程,所以对图像缩放的原理 ...
- 使用Python进行图像缩放处理
使用Python进行图像缩放处理 (感谢前辈)转自:https://zhuanlan.zhihu.com/p/26446550 最近要进行数据预处理,所以要将读取的图片进行缩放才能使用,所以就来学一学 ...
- windows mobile 1+1 课堂
以下是平时东拉西凑的部分mobile知识,欢迎大家一起来添加: 1. 窗体中"X"代表最小化窗体,而"OK"代表关闭窗体.可以通过窗体中minimizeBox属 ...
- Symbian财报显示手机操作系统仍Windows Mobile, Linux
根据全球手机操作系统供应商Symbian近日公布的截至2007年第4季度以及2007年全年未审计的财务和运营数据,Symbian智能手机在2007年出货量达7730万部.业内认为,根据这个财报,Sym ...
- 图像缩放算法及速度优化
原文来自:博客园 小欣子 图像缩放算法及速度优化--(一)最近邻插值 图像缩放算法及速度优化--(二)双线性插值 --------------------以下为原文------------------ ...
- OpenCV图像缩放插值之BiCubic双三次插值
图像缩放算法简介 在图像的仿射变换中,很多地方需要用到插值运算,常见的插值运算包括最邻近插值,双线性插值,双三次插值(立体插值),兰索思插值等方法,OpenCV提供了很多方法,其中,双线性插值由于折中 ...
最新文章
- DPDK 初识DPDK(十五)
- 项目中常用的 iOS 第三方库
- cordova构建项目命令小结
- Visualizing and Understanding Convolutional Networks论文解读
- 凸优化第三章凸函数 3.6 关于广义不等式的凸性
- 不知不觉,到51cto一年了!
- PyCharm:Error running xxx: Cannot run program D:\Python27\python.exe
- 项目管理工具——Jira使用和配置
- 软件服务化:管理当先
- 已经过去2周了,你感觉怎么样?
- Android版本9华为,华为应用市场旧版本下载-华为应用市场老版v9.0.0.303 安卓版 - 极光下载站...
- noip2014 珠心算测验 (枚举)
- C# 以MP3的格式将录制的音频数据写入文件流
- 腾讯区块链正式落地法律场景,携手慧狮构建“司法联盟链”
- SNIPER: Efficient Multi-Scale Training解读
- 【云计算与大数据技术】分布式数据库NoSQL中KV、列式、图、文档数据库的讲解(图文解释 超详细)
- python 论文写作_论文编辑神器Sublime Text,让论文写作过程事半功倍
- java学习笔记(九)一维数组与内存关系
- 图片文件中隐藏一个rar压缩包的秘密
- 大学java程序设计期末考试,成功跳槽阿里!
热门文章
- 基于Spring Security的认证授权_应用详解_自定义退出_Spring Security OAuth2.0认证授权---springcloud工作笔记130
- 电路制版工作笔记001---印刷电路板的制作过程
- resnet 25 训练人脸识别
- stl的multiset和set和priority_queue区别
- 解决从github上下载代码仓库慢的问题
- 文件系统与linux相关知识点
- 将ini文件内容读出
- 多媒体播放(windows音乐播放)
- CJSON之完全基于C库函数的使用
- AD原理图编译WARNING:Net XXX has no driving source