在J2ME中实现图片的反转效果(包括垂直和水平)
作者:陈跃峰
出自:http://blog.csdn.net/mailbomb
在J2ME编程中,为了最大限度的节约空间,有些时候需要自己来实现图形的反转,这里简单介绍一下实现图形反转的一些技巧。
图象的反转其实就是按照一定的规律,将图片中的每个像素点进行重新的排列。反转是进行像素点重新排列中简单的一种。
水平反转的原理就是把图片中的每一列都进行处理,而垂直反转则是对于图片中的每行进行重新的处理,下面是一个简单的示例代码。其中将反转的功能封装成了具体的方法,具体代码如下:
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("/res/pic/test.png");
}catch(Exception e){}
}
protected void paint(Graphics g) {
//绘制正常的图片
g.drawImage(img,30,40,Graphics.LEFT | Graphics.TOP);
//绘制水平反转的图片
hConvert(g,img,30,60);
//绘制垂直反转的图片
vConvert(g,img,30,80);
}
/**
* 水平反转,即左右对称
* @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);
}
}
}
说明:未经允许,严禁转载!