J2ME图片颠倒,自己做了一个小小的矩阵转秩方法

 

J2ME 里,把本来好好呆着的 来,好像有个 Sprite 里面封装了一些方法。

本人 J2ME 几天,昨天不知道有 回事, 了能把 片旋 转过 来,自己做了个小方法

 

 

Image 中, getRGB 方法,是把 片的 RGB 色数 成一

用法是这样: img .getRGB(srcRGB, 0, width, 0, 0, width, height );

具体参数含义可以参考 MIDP API 文档。

 

本来 RGB 色数 2 ,存 1 时,还需要再知道 2 维数组的宽度,就可以还原了。

0 1 2 3 4 5 6 7 8 9 10 11, 如果知道宽度是 3 ,就能把这个 1 维数组还原为 2 维的 0 1 2    3 4 5    6 7 8   9 10 11

 

 

Image 类中, 还有个方法createImage

是根据1维的RGB数组,将它转换为2维的颜色矩阵,以该颜色矩阵创建一个图形。

用法是这样:createRGBImage(srcRGB,width,height, true);

 

1维数组转换为矩阵的原理同上。

 

原图片的RGB颜色矩阵能够得到,要想颠倒就是把该矩阵转换一下就好了。

 

比如将图1

转换为图2

 

即可以转换到求矩阵的转秩这个问题上。

 

 

我做的1维数组“假装”是2维矩阵,返回结果为1维数组,也“假装”是2维矩阵的方法如下

 

    //1维数组假装成矩阵,然后转制
    private int[] arrAnti(int[] src,int width,int height)
    {
        int[] rst=new int[width*height];
        for(int i=0;i<width*height;i++)
        {

            rst[i]=src[i*width-(i/height)*(width*height-1)];
        }
        return rst;
    }

 

src是原数组,返回的rst是转秩后的数组。

 

将这个数组应用到系统中,代码如下:

 

package com.miao.anti;

import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class Anti extends MIDlet {
    Display dis;
    Image img=null;
    Image img1=null;
    MyCanvas mc=new MyCanvas();
   
    //1维数组假装成矩阵,然后转制
    private int[] arrAnti(int[] src,int width,int height)
    {
        int[] rst=new int[width*height];
        for(int i=0;i<width*height;i++)
        {

            rst[i]=src[i*width-(i/height)*(width*height-1)];
        }
        return rst;
    }
   
    public Anti() {
        dis=Display.getDisplay(this);
        try
        {
            img=Image.createImage("/img.png");
        }catch(Exception ex){}
       
        int width=img.getWidth();
        int height=img.getHeight();
       
        int[] srcRGB=new int[width*height];

        img.getRGB(srcRGB, 0, width, 0, 0, width,height);
        srcRGB=this.arrAnti(srcRGB, width, height);
        img1=Image.createRGBImage(srcRGB,height,width, true);
        dis.setCurrent(mc);
    }

    protected void pauseApp() {
        // TODO Auto-generated method stub

    }

    class MyCanvas extends Canvas{
        protected void paint(Graphics g) {
           
            g.drawImage(img,0,0,Graphics.LEFT|Graphics.TOP);
            g.drawImage(img1,100,0,Graphics.LEFT|Graphics.TOP);
        }
       
    }

}

 

运用了getRGB和createRGBImage这两个API方法,

再加上自己做的arrAnti方法,就可以实现把图片放倒啦~

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值