- 浏览: 813561 次
- 性别:
- 来自: 广州
-
最新评论
-
mixture:
语句int num1, num2;的频度为1;语句i=0;的频 ...
算法时间复杂度的计算 [整理] -
zxjlwt:
学习了。http://surenpi.com
[问题解决]Error: ShouldNotReachHere() [整理] -
Animal:
谢谢 楼主 好东西
算法时间复杂度的计算 [整理] -
univasity:
gaidandan 写道缓存失败,,模拟器上可以缓存,同样代码 ...
[开发总结]WebView使用中遇到的一些问题&解决 -
blucelee2:
那么麻烦干吗,而且这种方法会导致,当拉太小的时候样式会丢掉,整 ...
[SWT]SashForm中固定单侧大小(&实现面板隐藏)
收集了一下图像缩放的函数,可能实现的方式很多,感觉这几个不错的,分享下
说明:以下函数都是基于MIDP2.0的,缩放后保留透明色。
public static Image resizeImage(Image src, int destW, int destH) { int srcW = src.getWidth(); int srcH = src.getHeight(); // create pixel arrays int[] destPixels = new int[destW * destH]; // array to hold destination // pixels int[] srcPixels = new int[srcW * srcH]; // array with source's pixels src.getRGB(srcPixels, 0, srcW, 0, 0, srcW, srcH); // simple point smapled resizing // loop through the destination pixels, find the matching pixel on // the source and use that for (int destY = 0; destY < destH; ++destY) { for (int destX = 0; destX < destW; ++destX) { int srcX = (destX * srcW) / destW; int srcY = (destY * srcH) / destH; destPixels[destX + destY * destW] = srcPixels[srcX + srcY * srcW]; } } // return a new image created from the destination pixel buffer return Image.createRGBImage(destPixels, destW, destH, true); }
public static Image ZoomImage(Image src, int desW, int desH) { Image desImg = null; int srcW = src.getWidth(); // 原始图像宽 int srcH = src.getHeight(); // 原始图像高 int[] srcBuf = new int[srcW * srcH]; // 原始图片像素信息缓存 src.getRGB(srcBuf, 0, srcW, 0, 0, srcW, srcH); // 计算插值表 int[] tabY = new int[desH]; int[] tabX = new int[desW]; int sb = 0; int db = 0; int tems = 0; int temd = 0; int distance = srcH > desH ? srcH : desH; for (int i = 0; i <= distance; i++) { /* 垂直方向 */ tabY[db] = sb; tems += srcH; temd += desH; if (tems > distance) { tems -= distance; sb++; } if (temd > distance) { temd -= distance; db++; } } sb = 0; db = 0; tems = 0; temd = 0; distance = srcW > desW ? srcW : desW; for (int i = 0; i <= distance; i++) { /* 水平方向 */ tabX[db] = (short) sb; tems += srcW; temd += desW; if (tems > distance) { tems -= distance; sb++; } if (temd > distance) { temd -= distance; db++; } } // 生成放大缩小后图形像素buf int[] desBuf = new int[desW * desH]; int dx = 0; int dy = 0; int sy = 0; int oldy = -1; for (int i = 0; i < desH; i++) { if (oldy == tabY[i]) { System.arraycopy(desBuf, dy - desW, desBuf, dy, desW); } else { dx = 0; for (int j = 0; j < desW; j++) { desBuf[dy + dx] = srcBuf[sy + tabX[j]]; dx++; } sy += (tabY[i] - oldy) * srcW; } oldy = tabY[i]; dy += desW; } // 生成图片 desImg = Image.createRGBImage(desBuf, desW, desH, true); return desImg; }
public static Image scaleImage(Image original, int newWidth, int newHeight) { int[] rawInput = new int[original.getHeight() * original.getWidth()]; original.getRGB(rawInput, 0, original.getWidth(), 0, 0, original .getWidth(), original.getHeight()); int[] rawOutput = new int[newWidth * newHeight]; // YD compensates for the x loop by subtracting the width back out int YD = (original.getHeight() / newHeight) * original.getWidth() - original.getWidth(); int YR = original.getHeight() % newHeight; int XD = original.getWidth() / newWidth; int XR = original.getWidth() % newWidth; int outOffset = 0; int inOffset = 0; for (int y = newHeight, YE = 0; y > 0; y--) { for (int x = newWidth, XE = 0; x > 0; x--) { rawOutput[outOffset++] = rawInput[inOffset]; inOffset += XD; XE += XR; if (XE >= newWidth) { XE -= newWidth; inOffset++; } } inOffset += YD; YE += YR; if (YE >= newHeight) { YE -= newHeight; inOffset += original.getWidth(); } } return Image.createRGBImage(rawOutput, newWidth, newHeight, true); }
我将100*100的图放大到200*200后对比了一下,ZoomImage生成的图片和另外两个函数生成的图像有点区别,感觉ZoomImage的效果好一点。再放大点就基本一样了看不出区别了。
效率上我用6120c测了下:
resizeImage 54~56(μs),
ZoomImage 58~60(μs),
scaleImage 63~65(μs)
仅供参考,其实没多大区别的,呵呵。
发表评论
-
对Java的I/O流理解
2011-02-19 23:04 1974这是很久前另一个BLOG上的,现在不用了。转过来吧,方便查看. ... -
A*寻路(J2ME实现)
2011-02-19 23:00 1316这是很久前另一个BLOG上的,现在不用了。转过来吧,方便查看. ... -
J2ME上检测是否支持特定的API
2011-02-19 22:59 1522这是很久前另一个BLOG上的,现在不用了。转过来吧,方便查看. ... -
J2me paint[转]
2011-02-19 22:58 1439这是很久前另一个BLOG上的,现在不用了。转过来吧,方便查看. ... -
[JSR-184][3D编程指南(译文)]第一部分:快速进入移动JAVA 3D编程世界
2011-01-23 00:37 1749[英文原文&源码下载] ... -
[JSR-184][3D编程指南]Part V: Heightmap terrain rendering using M3G
2011-01-22 23:13 1890<!-- 整理收集自网络,收藏以便日后查阅 --> ... -
[JSR-184][3D编程指南]Part IV:M3G built-in collision,light physics and camera perspec
2011-01-22 23:04 2134<!-- 整理收集自网络,收藏以便日后查阅 --> ... -
[JSR-184][3D编程指南]Part III: Particle systems and immediate mode rendering (2)
2011-01-22 22:56 1544<!-- 整理收集自网络,收藏以便日后查阅 --> ... -
[JSR-184][3D编程指南]Part III: Particle systems and immediate mode rendering (1)
2011-01-22 22:48 2232<!-- 整理收集自网络,收藏以便日后查阅 --> ... -
[JSR-184][3D编程指南]Part II: Light 3D theory and orientation
2011-01-22 22:29 1533<!-- 整理收集自网络,收藏以便日后查阅 --> ... -
[JSR-184][3D编程指南]Part I: Quick jump into the world of Mobile Java 3D programming
2011-01-22 22:07 2343<!-- 整理收集自网络,收藏以便日后查阅 --> ... -
[JSR-184][3D编程指南]目录索引
2011-01-22 21:25 1421Series of 3D programming tutori ... -
[Kuix][转]Kuix的事件处理机制
2009-10-08 18:19 1662原文连接 kuix这 ... -
[积累]getResourceAsStream()返回null的问题
2009-03-13 22:04 2686getResourceAsStream()可以获取JAR包内的 ... -
[资料]根据J2ME(MIDP)虚拟机对程序编写的优化方式
2009-02-27 09:39 14521、关于虚拟机 我认为 ... -
[资料]MIDP2.0中如何通过代码画半透明的圆和椭圆
2009-02-27 09:10 1612最近在做一个小Demo时,需要画一个半透明的圆,看遍M ... -
[资料]MIDP设计模式之集结贴[JavaME]
2009-02-23 22:07 14141: 架构性宣言: MI ... -
[资料]MVC在J2ME项目中的应用之MVC慨述
2009-02-23 21:48 1276内容提要: 本文简要的介绍了MVC模式的思想,并分析了M ... -
[资料]基于MVC模式的J2ME应用程序框架设计
2009-02-23 21:24 2860原文:http://www.mcu123.com/ ... -
[资料]线程在J2ME应用中的使用
2009-02-22 17:05 1612简要说明: 非常好的一篇文章,谈论到了线程各个方面的问题 ...
相关推荐
在J2ME(Java 2 Micro Edition)平台下进行图像处理时,图片的缩放是一个常见的需求。本文将详细介绍三种不同的图片缩放方法,包括它们的工作原理、实现代码及适用场景。 #### 方法一:简单线性缩放 ```java public...
开发者可以使用这个类来裁剪、缩放、旋转图像,并进行颜色处理。为了优化性能,可能需要使用缓冲区策略和内存管理技巧。 **动画制作** 在J2ME中实现动画通常涉及帧序列或时间驱动的更新。开发者可以创建一系列静态...
在描述中提到的"几个J2ME手机游戏源代码",我们可以推测这是一组包含了经典游戏的源代码,如飞机射击游戏和俄罗斯方块。这些游戏源代码对于学习J2ME游戏开发的初学者来说非常有价值,因为它们展示了实际的编程实践和...
J2ME提供了如`Image`类来处理图像,包括加载、缩放、裁剪等操作。 **典型图像操作**包括颜色转换、图像裁剪、旋转、平移等。这些操作在游戏中的应用广泛,如角色移动、动画制作等。 **图像特效原理**是提升游戏...
在这个"J2ME教学代码整理.rar"压缩包中,包含了学习J2ME游戏开发的一些实例代码,对于初学者或想要回顾经典移动游戏开发技术的人来说是一份有价值的资源。 首先,"www.pudn.com.txt"可能是一个文档,记录了代码来源...
对于更复杂的图像操作,如旋转、缩放或裁剪,J2ME可能需要额外的库,如`LWUIT`(Lightweight UI Toolkit)或者第三方库。 以下是一些J2ME初学者可能会遇到的具体例子: 1. 文本读取:使用`FileConnection`接口打开...
这个“j2me图像存储”项目显然是使用Eclipse集成开发环境(IDE)以及Nokia Development Suite进行的,这表明我们将探讨的是如何在J2ME平台上处理和存储图像数据。 在J2ME中,处理图像通常涉及以下知识点: 1. **...
在J2ME中,实现这个游戏主要涉及以下几个知识点: - **用户输入处理**:利用J2ME的KeyListener或者Command接口,监听键盘事件,控制蛇的移动方向。 - **图形绘制**:使用Graphics类进行屏幕绘图,包括蛇、食物和...
本文将深入探讨如何在J2ME环境中使用查表法实现sqrt开方函数。 查表法的基本思想是预先计算好一部分常用数值的平方根,存储在一个数组中。当需要计算平方根时,通过查找预计算好的表来快速得到结果。这种方式在效率...
从网上收集的5个J2ME手机游戏开发类库: 1. LVector.java:Vector实现类; 2. StringTokenizer.java:StringTokenizer类; 3. SimpleCache.java:Cache类; 4. MD5Digest.java:J2ME MD5算法类; 5....
我的第一个j2me游戏代码我的第一个j2me游戏代码我的第一个j2me游戏代码我的第一个j2me游戏代码我的第一个j2me游戏代码我的第一个j2me游戏代码我的第一个j2me游戏代码我的第一个j2me游戏代码我的第一个j2me游戏代码我...
J2ME开发涉及以下几个核心概念: 1. **KVM (K Virtual Machine)**:这是J2ME设备上的Java虚拟机,它针对资源有限的设备进行了优化,内存占用小,启动速度快。 2. **MIDP (Mobile Information Device Profile)**:...
通过阅读源码,我们可以学习到如何使用J2ME的Graphics类进行图像绘制,如何处理用户输入事件,以及如何管理游戏状态。 2. **吃豆子** 吃豆子游戏是一款经典的迷宫追逐游戏,玩家需要控制小豆子在迷宫中吃掉所有...
2. **绘制函数**:根据当前帧,将相应的图像绘制到画布上,可能涉及到图像的平移、旋转等操作。 3. **帧率控制**:通过计时器或事件驱动来控制每帧的更新间隔,以保证动画的流畅性。 4. **状态更新**:在每帧之间,...
由于J2ME设备的屏幕大小可能不同,可能需要根据当前设备的屏幕尺寸调整背景图像的位置和缩放。你可以使用`getWidth()`和`getHeight()`方法获取屏幕尺寸,并相应地调整图像位置。 6. **刷新画布**: 如果背景图像...
EasyMF 是一个 J2ME 开发框架,目标是设计一个简单、稳定、可快速开发的 J2ME 开发框架。它简化了 UI 设计、RMS 操作、日志框架、联网框架、通用工具设计等多个方面。EasyMF 的功能列表包括 UI 框架、日志框架、RMS ...
J2ME(Java 2 Micro Edition)是Java平台的一个子集,专为移动设备、嵌入式系统等资源有限的环境设计。本篇文章将深入探讨如何利用J2ME技术开发一款简单的飞机游戏,以此帮助初学者理解J2ME编程的基本原理和技巧。 ...
J2ME虽然资源有限,但仍然可以通过使用插值算法来实现高质量的图像缩放。插值算法是一种用于提高图像分辨率的方法,它通过在原始像素之间插入新的像素值来实现平滑的放大效果,避免像素化的现象。本文将深入探讨J2ME...
直接吧函数写在图片方法里,调用填写写大小参数就可以了。
"midpng-javadoc-final"这个文件名可能指的是MIDP PNG图像处理相关的API文档,对于理解如何在J2ME环境中处理图像和图形操作至关重要。通过深入学习和实践,开发者能够熟练掌握J2ME API,构建出高效且用户体验良好的...