频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

在J2ME中实现图片的翻转效果

来源:www.j2medev.com 作者:陈跃峰 出处:巧巧读书 2006-03-20 进入讨论组

在J2ME编程中,为了最大限度的节约空间,有些时候需要自己来实现图形的反转,这里简单介绍一下实现图形反转的一些技巧。

图象的反转其实就是按照一定的规律,将图片中的每个像素点进行重新的排列。反转是进行像素点重新排列中简单的一种。水平反转的原理就是把图片中的每一列都进行处理,而垂直反转则是对于图片中的每行进行重新的处理,下面是一个简单的示例代码。其中将反转的功能封装成了具体的方法,具体代码如下:

/*

* TestMIDlet.java

*

* Created on 2005年12月9日, 上午9:02

*/

package imageconvert;

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

/**

*

* @author Administrator

* @version

*/

public class TestMIDlet extends MIDlet {

private Display display = null;

private ImageConvertCanvas canvas = null;

public void startApp() {

display = Display.getDisplay(this);

canvas = new ImageConvertCanvas();

display.setCurrent(canvas);

}

public void pauseApp() {

}

public void destroyApp(boolean unconditional) {

}

}

package imageconvert;

import javax.microedition.lcdui.*;

/**

*

* 实现图片的水平和垂直反传,即对称变换

* @version 1.0

*

*/

public class ImageConvertCanvas extends Canvas {

/**图片对象*/

private Image img = null;

public ImageConvertCanvas() {

//导入图片

try{

img = Image.createImage("/leaf.png");

}catch(Exception e){}

}

protected void paint(Graphics g) {

int color = g.getColor();

g.setColor(0xFFFFFF);

g.fillRect(0,0, getWidth(),getHeight());

g.setColor(color);

//绘制正常的图片

g.drawImage(img,0,0,Graphics.LEFT | Graphics.TOP);

//绘制水平反转的图片

hConvert(g,img,0,img.getHeight()+5);

//绘制垂直反转的图片

vConvert(g,img,0,img.getHeight()*2+10);

}

/**

*

* 水平反转,即左右对称

*

* @param g Graphics 画笔

*

* @param img Image 图片

*

* @param x int 图片左上角的x坐标

*

* @param y int 图片左上角的y坐标

*

*/

private void hConvert(Graphics g,Image img,int x,int y){

if(img == null){

return;

}

//获得图片大小

int w = img.getWidth();

int h = img.getHeight();

//绘制

for(int i = 0;i < w;i++){

//设置切割区域是1列

g.setClip(x + i,y,1,h);

//绘制图片

g.drawImage(img,x - w + 2 * i,y,Graphics.LEFT | Graphics.TOP);

}

}

/**

*

* 垂直反转,即上下对称

*

* @param g Graphics 画笔

*

* @param img Image 图片

*

* @param x int 图片左上角的x坐标

*

* @param y int 图片左上角的y坐标

*

*/

private void vConvert(Graphics g,Image img,int x,int y){

if(img == null){

return;

}

//获得图片大小

int w = img.getWidth();

int h = img.getHeight();

//绘制

for(int i = 0;i < h;i++){

//设置切割区域是1行

g.setClip(x,y + i,w,1);

//绘制图片

g.drawImage(img,x,y - h + 2 * i,Graphics.LEFT | Graphics.TOP);

}

}

}

运行效果如下所示:

注:本文主要内容中摘自陈跃峰的blog,本人对绘图代码进行了简单修改。并提供了MIDlet和图片演示。原文请参考http://blog.csdn.net/Mailbomb/archive/2005/12/07/546302.aspx 下载源码

文章来源:http://www.j2medev.com/Article/ShowArticle.asp?ArticleID=1087 来自:http://www.qqread.com/j2ee/e402913801.html 更多文章 更多内容请看J2ME开发教程J2ME游戏开发应用图形和动态效果实现专题,或进入讨论组讨论。

收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章