原文 http://www.3geye.net/?3/viewspace-2826
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
//功能:实现图片的高效翻转
public class ImageUtil ...{
//无变化
public final static int TRANS_NONE = 0;
// 顺时针翻转90度
public final static int TRANS_ROT90 = 5;
//顺时针翻转180度
public final static int TRANS_ROT180 = 3;
//顺时针翻转270度
public final static int TRANS_ROT270 = 6;
// 水平镜像翻转
public final static int TRANS_MIRROR = 2;
//水平镜像翻转并顺时针翻转90度
public final static int TRANS_MIRROR_ROT90 = 7;
//水平镜像翻转并顺时针翻转180度
public final static int TRANS_MIRROR_ROT180 = 1;
//水平镜像翻转并顺时针翻转270度
public final static int TRANS_MIRROR_ROT270 = 4;
//@功能 实现图片的翻转
//@参数 Image srcImage 原图
int transform 翻转方向
//@返回值 转换后的图片
public static Image transformImage(Image srcImage, int transform) ...{
int srcW = srcImage.getWidth();
int srcH = srcImage.getHeight();
Image imgRet = null;
switch (transform) ...{
case TRANS_NONE:
imgRet = srcImage;
break;
case TRANS_ROT90:
...{
/* 原: 目标:
* 1234 951
* 5678 062
* 90ab a73
* b84
* */
int[] srcRGB = new int[srcW];
imgRet = Image.createImage(srcH, srcW);
Graphics g = imgRet.getGraphics();
for (int i = 0; i < srcH; i++) ...{
srcImage.getRGB(srcRGB, 0, srcW, 0, i, srcW, 1);
g.drawRGB(srcRGB, 0, 1, srcH - i - 1, 0, 1, srcW, true);
}
}
break;
case TRANS_ROT180:
...{
/* 原: 目标:
* 1234 ba09
* 5678 8765
* 90ab 4321
*
* */
int[] srcRGB = new int[srcW];
imgRet = Image.createImage(srcW, srcH);
Graphics g = imgRet.getGraphics();
for (int i = 0; i < srcH; i++) ...{
srcImage.getRGB(srcRGB, 0, srcW, 0, i, srcW, 1);
arrayExchange(srcRGB);
g.drawRGB(srcRGB, 0, srcW, 0, srcH-1-i, srcW, 1, true);
}
}
break;
case TRANS_ROT270:
...{
/* 原: 目标:
* 1234 48b
* 5678 37a
* 90ab 260
* 159
* */
int[] srcRGB = new int[srcW];
imgRet = Image.createImage(srcH, srcW);
Graphics g = imgRet.getGraphics();
for (int i = 0; i < srcH; i++) ...{
srcImage.getRGB(srcRGB, 0, srcW, 0, i, srcW, 1);
arrayExchange(srcRGB);
g.drawRGB(srcRGB, 0, 1, i, 0, 1, srcW, true);
}
}
break;
case TRANS_MIRROR:
...{
/* 原: 目标:
* 1234 4321
* 5678 8765
* 90ab ba09
*
* */
int[] srcRGB = new int[srcW];
imgRet = Image.createImage(srcW, srcH);
Graphics g = imgRet.getGraphics();
for (int i = 0; i < srcH; i++) ...{
srcImage.getRGB(srcRGB, 0, srcW, 0, i, srcW, 1);
arrayExchange(srcRGB);
g.drawRGB(srcRGB, 0, srcW, 0, i, srcW, 1, true);
}
}
break;
case TRANS_MIRROR_ROT90:
...{
/* 原: 目标:
* 1234 b84
* 5678 a73
* 90ab 062
* 951
* */
int[] srcRGB = new int[srcW];
imgRet = Image.createImage(srcH, srcW);
Graphics g = imgRet.getGraphics();
for (int i = 0; i < srcH; i++) ...{
srcImage.getRGB(srcRGB, 0, srcW, 0, i, srcW, 1);
arrayExchange(srcRGB);
g.drawRGB(srcRGB, 0, 1, srcH - i - 1, 0, 1, srcW, true);
}
}
break;
case TRANS_MIRROR_ROT180:
...{
/* 原: 目标:
* 1234 90ab
* 5678 5678
* 90ab 1234
*
* */
int[] srcRGB = new int[srcW];
imgRet = Image.createImage(srcW, srcH);
Graphics g = imgRet.getGraphics();
for (int i = 0; i < srcH; i++) ...{
srcImage.getRGB(srcRGB, 0, srcW, 0, i, srcW, 1);
g.drawRGB(srcRGB, 0, srcW, 0, srcH-1-i, srcW, 1, true);
}
}
break;
case TRANS_MIRROR_ROT270:
...{
/* 原: 目标:
* 1234 159
* 5678 260
* 90ab 37a
* 48b
* */
int[] srcRGB = new int[srcW];
imgRet = Image.createImage(srcH, srcW);
Graphics g = imgRet.getGraphics();
for (int i = 0; i < srcH; i++) ...{
srcImage.getRGB(srcRGB, 0, srcW, 0, i, srcW, 1);
g.drawRGB(srcRGB, 0, 1, i, 0, 1, srcW, true);
}
}
break;
default:
imgRet = srcImage;
break;
}
return imgRet;
}
//@功能 翻转一个INT数组
//@参数 要转换的INT数组
// @返回值 无
//
public static final void arrayExchange(int[] b)...{
int nCount = b.length;
int nLen = nCount/2;
nCount--;
for (int i = 0; i < nLen; i++) ...{
int nTemp = b;
b = b[nCount-i];
b[nCount-i] = nTemp;
}
}
}
分享到:
相关推荐
在这个"j2me图片特效包及demo程序"中,我们主要关注的是如何在 J2ME 应用程序中处理和操作图像,实现各种视觉效果。下面我们将详细探讨这些知识点: 1. **图片加载**:在 J2ME 中,通常使用 ` javax.microedition....
本文将深入探讨如何使用J2ME进行图片处理,包括缩放、裁剪、调整大小、镜像翻转、对比度和亮度调整、黑白效果、线条艺术以及粉笔画效果。我们将以`ImageUtil.java`为例,讲解源码中封装的类和方法。 首先,`...
┃3.7 图片的翻转 ┃3.8 绘制透明图片 ┃第三章教程打包下载 ┗━━━━━━━━━━━ ┌第四章 j2me游戏开发基础 ┃4.1 游戏画布的使用 ┃4_2.游戏精灵的使用 ┃4_3.图层管理器的使用 ┃4_4.游戏精灵旋转和其他...
- **MIDP 2.0**:移动信息设备简表2.0,增强了对游戏的支持,提供了处理游戏相关技术的API,如`javax.microedition.lcdui.game`包中的`Sprite`类用于图片翻转。 #### 四、开发环境搭建 1. **J2ME开发工具选择**:...
随着MIDP 2.0(Mobile Information Device Profile)的引入,J2ME增加了对精灵的支持,这是一种具有额外属性和方法以促进动画、变换(旋转、翻转和镜像)以及碰撞检测的图像。 ### 1. 精灵的基础知识 在J2ME中,...
【压缩包子文件的文件名称列表】"j2me的记忆牌" 这个文件名可能包含了游戏的主程序或资源文件,可能是.java文件(Java源代码),.jad和.jar文件(编译后的Java应用),或者是图片、音频等资源文件。 在J2ME中开发...
在工程结构上,J2ME项目通常分为Res(资源文件)和Src(源代码)目录,其中Res包含图片和音频等资源,而Src则存放源代码。相比之下,Android项目的结构更为复杂,除了Src外,还包括Res目录下的多个子目录:drawable...
开发华容道游戏将使用J2ME的MIDP2.0版本,因为它提供了对游戏开发的支持,如javax.microedition.lcdui.game包中的Sprite类,可用于图片翻转。为了开发,安装Sun公司的Wireless Toolkit (WTK) 2.0作为模拟器,因为它...
7. 资源管理:游戏可能包含音效、图片等资源,J2ME提供了ResourceLocator和Image类来加载和显示这些资源。 学习这个源码,开发者不仅可以了解J2ME的基本编程技巧,还能深入理解游戏开发中的策略设计、性能优化和...
对于华容道游戏,调研主要关注游戏规则和现有的技术解决方案,如J2ME的MIDP2.0,它提供了对游戏开发的支持,尤其是`javax.microedition.lcdui.game.Sprite`类,用于处理图像翻转,这对于游戏动画至关重要。...
7. **图片翻转**:实现图像的水平或垂直翻转。 8. **透明图片绘制**:处理图像的透明度。 【J2ME游戏开发基础】 第四章主要讲解J2ME游戏开发中的关键概念: 1. **游戏画布**:游戏的核心显示区域。 2. **游戏精灵...
MIDP2.0引入了javax.microedition.lcdui.game包,包含了一些专为游戏设计的类,如Sprite类,可以用于处理图像的翻转和动画效果,这对于创建动态的游戏场景非常有用。 开发J2ME游戏时,通常需要一个模拟器来测试代码...
- **res**: 资源文件,如图片、声音等。 #### 2. 关键类与接口 - **GameCanvas**: 继承自Canvas,实现游戏逻辑的核心类。 - **Board**: 用于表示棋盘状态,包括棋子的放置与翻转等操作。 - **Piece**: 表示棋子的类...
6. **资源管理**:J2ME平台的资源有限,因此源码中可能会有优化图片、声音和其他资源加载和管理的策略。 7. **错误处理与调试**:源码中应包含错误检测和异常处理代码,帮助开发者在遇到问题时进行调试和修复。 8....
总结来说,这段代码和文档提供了一个跨平台的图片处理工具包,特别关注了在资源有限的J2ME环境中如何高效地处理图片,以实现基本的裁剪、翻转和旋转功能。开发者可以通过调整模式参数来实现所需的效果,同时保持代码...
7. **资源管理**:游戏可能包含图像、声音等资源,开发者需要知道如何在J2ME中加载和管理这些资源,如使用Image类加载图片,播放音频可能需要用到MIDP的MidiPlayer或WavePlayer。 8. **优化与性能**:由于J2ME运行...
但J2ME对此提供的支持却十分有限,如MIDP2.0仅支持图像成90度整数倍的旋转。针对这种情况,本文提出了一种实现图像任意角度旋转的方案并提供了算法实现。然后对算法的应用问题进行了探讨,分析了算法的局限性。最后...
1. **镜像翻转**:对原始图像进行垂直翻转,创建一个倒影图像。 2. **模糊处理**:为了模拟水面反射的模糊效果,可以对倒影图像进行模糊滤波,例如高斯模糊。 3. **透明度叠加**:设置倒影图像的透明度,根据水面...