📄 bwtocolorscreenchangeanimation.java
字号:
//#condition polish.usePolishGui and polish.midp2/* * Created on 24.08.2005 at 15:37:25. * * Copyright (c) 2005 Robert Virkus / Enough Software * * This file is part of J2ME Polish. * * J2ME Polish is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * J2ME Polish is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with J2ME Polish; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Commercial licenses are also available, please * refer to the accompanying LICENSE.txt or visit * http://www.j2mepolish.org for details. */package de.enough.polish.ui.screenanimations;import javax.microedition.lcdui.Display;import javax.microedition.lcdui.Displayable;import javax.microedition.lcdui.Graphics;import javax.microedition.lcdui.Image;import de.enough.polish.ui.AccessibleCanvas;import de.enough.polish.ui.ScreenChangeAnimation;import de.enough.polish.ui.Style;import de.enough.polish.util.ImageUtil;/** * @author Tim Muders * */public class BwToColorScreenChangeAnimation extends ScreenChangeAnimation { private Image firstScreenImage; private int[] nextScreenRgb; private int[] currentScreenRgb;// private int[] bufferedScreenRgb; /** * */ public BwToColorScreenChangeAnimation() { super(); } /* (non-Javadoc) * @see de.enough.polish.ui.ScreenChangeAnimation#show(de.enough.polish.ui.Style, javax.microedition.lcdui.Display, int, int, javax.microedition.lcdui.Image, javax.microedition.lcdui.Image, de.enough.polish.ui.Screen) */ protected void show(Style style, Display dsplay, int width, int height, Image lstScreenImage, Image nxtScreenImage, AccessibleCanvas nxtCanvas, Displayable nxtDisplayable ) { System.out.print("show\n"); if ( this.nextScreenRgb == null ) { this.nextScreenRgb = new int[ width * height ]; this.currentScreenRgb = new int[ width * height ];// this.bufferedScreenRgb = new int [width * height]; if(this.firstScreenImage == null){ System.out.print("fill image\n"); this.firstScreenImage = this.nextCanvasImage; } } nxtScreenImage.getRGB( this.nextScreenRgb, 0, width, 0, 0, width, height );// nxtScreenImage.getRGB( this.bufferedScreenRgb, 0, width, 0, 0, width, height ); // TODO render a black and white version out of the nextScreenRgb array int color,red,green,blue; for(int i = 0;i < this.currentScreenRgb.length;i++){ color = this.nextScreenRgb[i]; red = (0x00FF & (color >>> 16)); green = (0x0000FF & (color >>> 8)); blue = color & (0x000000FF ); int brightness = (red + green + blue) / 3; if ( brightness > 127 ) { this.currentScreenRgb[i] = 0xFFFFFF; } else { this.currentScreenRgb[i] = 0x000000; }// color = (blue + (green * 256) + (red * 65536)); } super.show(style, dsplay, width, height, lstScreenImage, nxtScreenImage, nxtCanvas, nxtDisplayable ); } public void keyPressed(int keyCode) { super.keyPressed(keyCode); this.nextCanvasImage.getRGB( this.nextScreenRgb, 0, this.screenWidth, 0, 0, this.screenWidth, this.screenHeight ); } //#if polish.hasPointerEvents public void pointerPressed(int x, int y) { super.pointerPressed(x, y); this.nextCanvasImage.getRGB( this.nextScreenRgb, 0, this.screenWidth, 0, 0, this.screenWidth, this.screenHeight ); } //#endif private int colorValue(int currentColor,int targetColor,int factor){ int speed = 6; if(currentColor < targetColor){ int sum = (targetColor-currentColor ) ; if(sum > speed)sum = sum / speed; if(sum == 0)sum = 1; currentColor+= sum; } else{ int sum = (currentColor-targetColor ) ; if(sum > speed)sum = sum / speed; if(sum == 0)sum = 1; currentColor-= sum; } return currentColor; } /* (non-Javadoc) * @see de.enough.polish.ui.ScreenChangeAnimation#animate() */ protected boolean animate() { // TODO Auto-generated method stub boolean bolReturn = false; int color,nextColor,red,green,blue,nextRed,nextGreen,nextBlue; for(int i = 0;i < this.currentScreenRgb.length;i++){ color = this.currentScreenRgb[i]; nextColor = this.nextScreenRgb[i]; if(color != nextColor){ red = (0x00FF & (color >>> 16)); green = (0x0000FF & (color >>> 8)); blue = color & (0x000000FF ); nextRed = (0x00FF & (nextColor >>> 16)); nextGreen = (0x0000FF & (nextColor >>> 8)); nextBlue = nextColor & (0x000000FF); if(red != nextRed){ red = this.colorValue(red,nextRed,-1); } if(green != nextGreen){ green = this.colorValue(green,nextGreen,-1); } if(blue != nextBlue){ blue = this.colorValue(blue,nextBlue,-1); } if(red != nextRed || green != nextGreen || blue != nextBlue){ this.currentScreenRgb[i] = (red << 16) | (green << 8) | blue; bolReturn = true; } } } if (!bolReturn) { this.currentScreenRgb = null; this.nextScreenRgb = null; // TODO reset speed }// this.count++; return bolReturn; } /* (non-Javadoc) * @see javax.microedition.lcdui.Canvas#paint(javax.microedition.lcdui.Graphics) */ public void paint(Graphics g) { g.drawRGB(this.currentScreenRgb, 0, this.screenWidth, 0, 0, this.screenWidth, this.screenHeight, false ); this.display.callSerially( this ); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -