最近一段时间太忙,上篇博客说是把图像缩放的算法放上来,今天放上来。这个算法参考的是线性插值法来实现,也就是最简单的方法,在手机上面受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 上面固定比例图像缩放相关推荐

  1. ArcEngine中的地图缩放相关的常用操作以及固定比例放大缩小

    资料1: 这两个功能,和全图一样简单,也是继承CommandBase基类 public override void OnClick(){//Get IEnvelope interfaceIEnvelo ...

  2. 图形图像处理-之-高质量的快速的图像缩放 中篇 二次线性插值和三次卷积插值

    from:http://blog.csdn.net/housisong/article/details/1452249 图形图像处理-之-高质量的快速的图像缩放 中篇 二次线性插值和三次卷积插值    ...

  3. 图形图像处理 —— 图像缩放算法

    转自:http://blog.chinaunix.net/space.php?uid=22915173&do=blog&id=2185545 摘要:首先给出一个基本的图像缩放算法,然后 ...

  4. 几个图像缩放算法的比较

    几个图像缩放算法的比较 前段时间由于项目的需求,需要实现图像的缩放功能,期间查找了不少关于图像缩放算法的资料,现把自己的心得整理一下. 由于研究生期间没有选修过图像处理方面的课程,所以对图像缩放的原理 ...

  5. 使用Python进行图像缩放处理

    使用Python进行图像缩放处理 (感谢前辈)转自:https://zhuanlan.zhihu.com/p/26446550 最近要进行数据预处理,所以要将读取的图片进行缩放才能使用,所以就来学一学 ...

  6. windows mobile 1+1 课堂

    以下是平时东拉西凑的部分mobile知识,欢迎大家一起来添加: 1. 窗体中"X"代表最小化窗体,而"OK"代表关闭窗体.可以通过窗体中minimizeBox属 ...

  7. Symbian财报显示手机操作系统仍Windows Mobile, Linux

    根据全球手机操作系统供应商Symbian近日公布的截至2007年第4季度以及2007年全年未审计的财务和运营数据,Symbian智能手机在2007年出货量达7730万部.业内认为,根据这个财报,Sym ...

  8. 图像缩放算法及速度优化

    原文来自:博客园 小欣子 图像缩放算法及速度优化--(一)最近邻插值 图像缩放算法及速度优化--(二)双线性插值 --------------------以下为原文------------------ ...

  9. OpenCV图像缩放插值之BiCubic双三次插值

    图像缩放算法简介 在图像的仿射变换中,很多地方需要用到插值运算,常见的插值运算包括最邻近插值,双线性插值,双三次插值(立体插值),兰索思插值等方法,OpenCV提供了很多方法,其中,双线性插值由于折中 ...

最新文章

  1. DPDK 初识DPDK(十五)
  2. 项目中常用的 iOS 第三方库
  3. cordova构建项目命令小结
  4. Visualizing and Understanding Convolutional Networks论文解读
  5. 凸优化第三章凸函数 3.6 关于广义不等式的凸性
  6. 不知不觉,到51cto一年了!
  7. PyCharm:Error running xxx: Cannot run program D:\Python27\python.exe
  8. 项目管理工具——Jira使用和配置
  9. 软件服务化:管理当先
  10. 已经过去2周了,你感觉怎么样?
  11. Android版本9华为,华为应用市场旧版本下载-华为应用市场老版v9.0.0.303 安卓版 - 极光下载站...
  12. noip2014 珠心算测验 (枚举)
  13. C# 以MP3的格式将录制的音频数据写入文件流
  14. 腾讯区块链正式落地法律场景,携手慧狮构建“司法联盟链”
  15. SNIPER: Efficient Multi-Scale Training解读
  16. 【云计算与大数据技术】分布式数据库NoSQL中KV、列式、图、文档数据库的讲解(图文解释 超详细)
  17. python 论文写作_论文编辑神器Sublime Text,让论文写作过程事半功倍
  18. java学习笔记(九)一维数组与内存关系
  19. 图片文件中隐藏一个rar压缩包的秘密
  20. 大学java程序设计期末考试,成功跳槽阿里!

热门文章

  1. 基于Spring Security的认证授权_应用详解_自定义退出_Spring Security OAuth2.0认证授权---springcloud工作笔记130
  2. 电路制版工作笔记001---印刷电路板的制作过程
  3. resnet 25 训练人脸识别
  4. stl的multiset和set和priority_queue区别
  5. 解决从github上下载代码仓库慢的问题
  6. 文件系统与linux相关知识点
  7. 将ini文件内容读出
  8. 多媒体播放(windows音乐播放)
  9. CJSON之完全基于C库函数的使用
  10. AD原理图编译WARNING:Net XXX has no driving source