技术中心

这里象征着我们的态度和能力

>J2ME插值算法实现图片的放大缩小
作者:中国IT实验室    来源:中国IT实验室    发布时间:2012-01-01      浏览次数:7557
分享到:
欢迎进入Java社区论坛,与200万技术人员互动交流 >>进入

  前段时间接触了一些数字图像处理的问题,在1位师兄的指导下,在J2ME平台,完成了一些基本的2D图像处理算法。就当是对这段知识做一下总结,决定把这些算法写出来,和各位朋友共同探讨。这篇文章先介绍图像放大缩小的实现,程序是以Nokia S40的机器为平台实现的。

  1、实现图形缩放的基本思想:

  图像的变形变换,简单的说就是把源图像每个点坐标通过变形运算转为目标图像相应点的新坐标,但是这样会导致一个问题就是目标点的坐标通常不会是整数。所以我们在做放大变换时,需要计算生成没有被映射到的点;而在缩小变换时,需要删除一些点。这里我们采用最简单的一种插值算法:“最近邻域法”。顾名思义,就是把非整数坐标作一个四舍五入,取最近的整数点。

  看下面的一个图片放大的例子,左图为原始图像,右图为放大1倍的图像。里面的数字,表示所在像素的信息

  1 2 1 1 2 2

  5 4 5 5 4 4

  2、对于图片像素的操作:

  获取Image图片像素信息:

  标准的midp1.0没有提供获取图片像素信息的函数,对于NOKIA的机器,我们可以采用Nokia SDK提供的API获取像素信息。具体程序如下:

  g = image.getGraphics()

  DirectGraphics dg = DirectUtils.getDirectGraphics(g);

  dg.getPixels(short[] pixels, int offset, int scanlength, int x,int y, int width, int height, int format)

  参数介绍:

  short[] pixels: 用于接收像素信息的数组

  int offset:这篇文章中的用到的地方,添0就可以了

  int scanlength:添图片的宽度就行了

  int x:添0

  int y:添0

  int width:图片宽度

  int height:图片高度

  int format:444,表示图形格式,好像Nokia S40的机器都是采用444格式表示RGB颜色的。就是红,绿,蓝各用4位表示,至于可以表示透明色ARGB的4444格式,应该是机器硬件实现的。

  想具体了解Nokia SDK的信息,可以查看Nokia SDK的帮助文档。

  使用像素信息数组生成Image图片:

  image = Image.createImage(w, h);

  g = image.getGraphics()

  DirectGraphics dg = DirectUtils.getDirectGraphics(g);

  dg.drawPixels(short[] pixels,boolean transparency, int offset, int scanlength, int x, int y, int width,int height, int manipulation, int format)

  short[] pixels:像素信息数组

  boolean transparency:是否包含alpha位信息

  int offset:添 0

  int scanlength:添图片的宽度就行了

  int x:添 0

  int y:添 0

  int width:图片宽度

  int height:图片高度

  int manipulation:添 0

  int format:444

  下面开始介绍具体的算法,首先给出图像缩放的完整函数,然后对代码,分段进行解释

  /*********************************

  * @todo 图片放大缩小

  * @param srcImg 原始图片

  * @param desW 变化后图片的宽

  * @param desH 变化后图片的高

  * @return 处理后的图片

  *********************************/

  private Image ZoomImage(Image srcImg, int desW, int desH) {

  int srcW = srcImg.getWidth(); //原始图像宽

  int srcH = srcImg.getHeight(); //原始图像高

  short[] srcBuf = new short[srcW * srcH]; //原始图片像素信息缓存

  //srcBuf获取图片像素信息

  Image desImg = Image.createImage(srcW, srcH);

  if (srcImg.isMutable()) { /*如果是可变图像*/

  DirectUtils.getDirectGraphics(srcImg.getGraphics()).

  getPixels(srcBuf, 0, srcW, 0, 0, srcW, srcH, 444);

  } else { /*如果是非可变图像*/

  desImg.getGraphics().drawImage(srcImg, 0, 0, 0);

  DirectUtils.getDirectGraphics(desImg.getGraphics()).

  getPixels(srcBuf, 0, srcW, 0, 0, srcW, srcH, 444);

  }

[1] [2] [3] [4] 下一页

4000-880-989
(24小时热线)
联系客服
微信公众号

官方公众号

小程序

©2008-2022 CORPORATION ALL Rights Reserved. 昆明奥远科技有限公司版权所有 滇ICP备09003328号-1 滇公网安备 53011102000818号 增值电信业务经营许可证号:滇B2-20110045
昆明那家网络公司好,新媒体运营,网站优化,网络推广,网站建设,网页设计,网站设计,网站推广,云南网站公司,昆明新媒体公司,云南网红主播,昆明SEO公司,昆明网站建设,昆明网络推广,昆明网站优化,昆明网站推广,红河网站建设,大理网络公司,曲靖网络公司,丽江网站设计,昭通网络公司,保山大数据服务,智慧高速建设,智慧校园服务,云南IDC服务商,网络安全测评,等保测评,网站关键词排名优化服务,服务客户尽超2000余家,一切尽在奥远科技,服务电话:13888956730