⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 viewcanvas.java

📁 一个基于j2me MIDP1.0的图片翻转的源代码
💻 JAVA
字号:
//package com.circumgyrate;    
   
import javax.microedition.lcdui.*;   
   
/**  
 * <P>Title: </P>  
 * <P>Description: </P>  
 * <P>Copyright: Copyright (c) 2004</P>  
 * <P>Company: </P>  
 * @author not attributable  
 * @version 1.0  
 */   
   
public class ViewCanvas   
    extends Canvas   
    implements CommandListener, Runnable {   
  private Command cmExit; // Exit midlet    
  private String keyText = "0"; // Key code text,用来记录用户的击键,在这个例子里不使用    
  private int angle = 0; // 旋转的角度    
  private Image originImage; // 原始图像    
  private circumgyrate midlet;   
  private boolean alive = true;   
  private int interval = 100;   
  private Thread thread = null;   
   
  /*--------------------------------------------------  
   * Constructor  
   *-------------------------------------------------*/   
  public ViewCanvas(circumgyrate midlet) {   
    this.midlet = midlet;   
    try {   
      originImage = Image.createImage("/start.png");   
    }   
    catch (Exception e) {   
      System.out.println("load image fail!!!!!");   
    }   
    // Create exit command and listen for events    
    cmExit = new Command("退出", Command.EXIT, 1);   
    addCommand(cmExit);   
    setCommandListener(this);   
    thread = new Thread(this);   
    thread.start();   
  }   
   
  // 这是一个把图像绕中心点旋转一个角度的程序代码    
  // OriginImage传入原始图像,函数的返回值是旋转后的图像    
  // 这段代码只能旋转30度的整数倍角度,如果要旋转更精细    
  // 改一下tabCos,tabSin就行了,这两个数组保存的是cos和sin乘于4096的值    
  // 由于j2me不支持符点运算以及三角函数,所以用查表的方式计算sin,cos    
  int[] tabCos = {   
      4096, 3547, 2048, 0, -2048, -3547, -4096, -3547, -2048, 0, 2048, 3547};   
  int[] tabSin = {   
      0, 2048, 3547, 4096, 3547, 2048, 0, -2048, -3547, -4096, -3547, -2048};   
  private Image TransferImage(Image OriginImage, int angle) {   
    int w = OriginImage.getWidth();   
    int h = OriginImage.getHeight();   
    int ARGBData[] = new int[w * h];   
    int TranARGBData[] = new int[w * h];   
    OriginImage.getRGB(ARGBData, 0, w, 0, 0, w, h);   
    int centerX = w / 2;   
    int centerY = h / 2;   
    int i = ( (360 - angle) % 360) / 30;   
    for (int y1 = 0; y1 < h; y1++) {   
      for (int x1 = 0; x1 < w; x1++) {   
        // 这是坐标变换,不清楚的同志查一下坐标变换公式吧    
        int x2 = ( ( (x1 - centerX) * tabCos[i]) >> 12) -   
            ( ( (y1 - centerY) * tabSin[i]) >> 12) + centerX;   
        int y2 = ( ( (x1 - centerX) * tabSin[i]) >> 12) +   
            ( ( (y1 - centerY) * tabCos[i]) >> 12) + centerY;   
        if ( (x2 >= 0) && (x2 < w) && (y2 >= 0) && (y2 < h)) {   
          TranARGBData[y1 * w + x1] = ARGBData[y2 * w + x2];   
        }   
        else {   
          TranARGBData[y1 * w + x1] = 255 << 24;   
        }   
      }   
    }   
    return Image.createRGBImage(TranARGBData, w, h, true);   
  }   
   
  /*--------------------------------------------------  
   * Paint the text representing the key code  
   *-------------------------------------------------*/   
  protected void paint(Graphics g) {   
    // Clear the background (to white)    
    g.setColor(255, 255, 255);   
    g.fillRect(0, 0, getWidth(), getHeight());   
    g.drawImage(TransferImage(originImage, angle), 0, 0,   
                Graphics.TOP | Graphics.LEFT);   
    angle = (angle + 30) % 360; // 下一个旋转角度    
  }   
   
  public void run() {   
    while (true) {   
      if (alive) {   
        repaint();   
        try {   
          Thread.sleep(interval);   
        }   
        catch (InterruptedException e) {   
        }   
      }   
    }   
  }   
   
  /*--------------------------------------------------  
   * Command event handling  
   *-------------------------------------------------*/   
  public void commandAction(Command c, Displayable d) {   
    if (c == cmExit) {   
      midlet.exitMIDlet();   
    }   
  }   
   
  /*--------------------------------------------------  
   * Key code event handling  
   *-------------------------------------------------*/   
  protected void keyPressed(int keyCode) {   
    keyText = getKeyName(keyCode);   
    repaint();   
  }   
}   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -