作者:陈跃峰 文章来源:http://www.j2medev.com/Article/ShowArticle.asp?ArticleID=1087
在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.*;
/**
*
* 实现图片的水平和垂直反传,即对称变换
*
*
*
* @author 陈跃峰
*
* email:cqucyf@gmail.com
*
* @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
下载源码
分享到:
相关推荐
J2me中任意角度图片旋转 J2me中任意角度图片旋转
图片的特点及分类; png图片的格式 分析; 图片在J2me中的应用。
java j2me上的图片抖动效果 特效 供大家参考学习
j2me半透明图片实现半透明图片实现半透明图片实现
在J2ME上实现平滑的资源加载进度条 txt文本 源码描述:首先,我把我要加载的资源按其加载量来定其需要的百几比,比如我要加载一个大文件,一个小文件,我就将大文件定为80%,小文件定为20%,也就是把100%分为了两份...
J2me中文教程.pdf J2me中文教程.pdf
本程序实现了在J2ME中的备忘录的增加记录、删除记录、修改记录以及查询记录的功能。
j2me图片编辑器 j2me 手机游戏图片编辑器
J2ME插值算法实现图片的放大缩小 J2ME插值算法实现图片的放大缩小
J2ME 实现歌词滚动效果(在包 lrc目录里),另外还有其他一些入门级的实例,解压后倒入eclipse中 直接运行即可 (源码)
j2me 图片像书翻页的效果 j2me 图片像书翻页的效果 j2me 图片像书翻页的效果 j2me 图片像书翻页的效果
J2ME插值算法实现图片的放大缩小方法,难得的好资料,欢迎下载使用!
J2ME中png图片处理压缩,有代码,通俗易懂
j2me中改变图片大小,不错,给大家分享下,是一个静态方法,放程序里面直接调用就好!
这是我开发的J2ME实现画图程序,希望大家能互相学习交流
j2me中简单实现九宫格菜单,原理非常简单的。
主要是用java实现发短信的功能,在j2me客户端实现。
在J2ME和WAP中实现电话呼叫功能.doc 在J2ME和WAP中实现电话呼叫功能.doc
j2me 文档 开发 官方 中文 j2me 文档 开发 官方 中文 j2me 文档 开发 官方 中文
和大家共享一下用CANVAS来实现中文打字,真的不错哦!因为汉字太多,收录的字有限,我把工程放上来,大家觉得差什么字可以自己加!