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

📄 bqimage.java

📁 J2me唆哈的代码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*
 * Created on 2005-9-20 by pcy
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package a.a.a.midp.lcdui;

import java.awt.MediaTracker;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.*;
import javax.imageio.ImageIO;
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;

import a.a.a.b.*;

import java.util.jar.*;
import java.util.zip.*;


public class BQImage {

    /**
     * ʵ���������õ�java.awt.Image����
     */
    private java.awt.Image instance;
    
    private Image shell;
    /**
     * ��־��Image�Ƿ�ɸı��
     */
    private boolean isMutable;

    /**
     * Image�Ŀ�
     */
    private int width;

    /**
     * Image�ĸ�
     */
    private int height;

    /**
     * ��Ч����ת����
     */
    private static final int INVALID_TRANSFORM_BITS = 0xFFFFFFF8;

    /**
     * Image����Ĺ��캯��?ʵ�����õ���һ��java.awt.Image����
     * ��Ϊ����,����Ϊ��com.nokia.mid.ui.DirectUtils����Ҫ�õ� �������Լ�ȥ����Image����
     * 
     * @param image
     *            java.awt.Image��һ�����?     * 
     */
    public BQImage(java.awt.Image image) {
        this.instance = image;
        width = image.getWidth(null);
        height = image.getHeight(null);
        isMutable = false;
    }

    /**
     * ��imageData�����д���һ��Image����
     * 
     * @param imageData
     *            ��ij�ֿ��Խ���ĸ�ʽ���������ֵ����
     * @param imageOffset
     *            ��ʼλ��
     * @param imageLength
     *            ��ݳ���?     * @return ���imageData������offset��ʼ,length������ݹ����Image����
     * @since MIDP1.0
     */
    public static BQImage createImage(byte[] imageData, int imageOffset,
            int imageLength) {
        if (imageOffset < 0 || imageOffset >= imageData.length
                || imageLength < 0
                || imageOffset + imageLength > imageData.length) {
            throw new ArrayIndexOutOfBoundsException();
        }
        java.awt.Image image = null;
        if(imageLength>(1<<14)){
        //if(imageLength>0){

        	try {
    	    	Toolkit toolkit = Toolkit.getDefaultToolkit();
    	        image = toolkit.createImage(imageData, imageOffset, imageLength);
    	        MediaTracker tracker = new MediaTracker(EmulatorFrame.instance);
    	        tracker.addImage(image, 0);
                tracker.waitForID(0);
                if(image.getWidth(null)<0||image.getHeight(null)<0){
                	int rgb[]=e.getImageRGB(imageData,imageOffset,imageLength);
                    int w=rgb[0];
                    int h=rgb[1];
                    BufferedImage img=new BufferedImage(w,h,BufferedImage.TYPE_INT_ARGB);
                    img.setRGB(0,0,w,h,rgb,2,w);
                    rgb=null;
                    image=img;
                }
            } catch (Exception exp) {
            	try{
            		ByteArrayInputStream bais = new ByteArrayInputStream(imageData,
    	                    imageOffset, imageLength);            
                    image = ImageIO.read(bais);
                    if(image.getWidth(null)<0||image.getHeight(null)<0){
                    	try{
    	                	int rgb[]=e.getImageRGB(imageData,imageOffset,imageLength);
    	                    int w=rgb[0];
    	                    int h=rgb[1];
    	                    BufferedImage img=new BufferedImage(w,h,BufferedImage.TYPE_INT_ARGB);
    	                    img.setRGB(0,0,w,h,rgb,2,w);
    	                    rgb=null;
    	                    image=img;
                    	}catch(Exception exp2){
                    		exp2.printStackTrace();
                    	}
                    }
    	                
            	}catch(Exception exp3){
            		exp3.printStackTrace();
            	}
            }
        }else{
        	try{
            	int rgb[]=e.getImageRGB(imageData,imageOffset,imageLength);
                int w=rgb[0];
                int h=rgb[1];
                if(w<=0||h<=0){
                	FileOutputStream f=new FileOutputStream(new File("temp.png"));
                	f.write(imageData,imageOffset,imageLength);
                	f.close();
                	System.out.println("read img err");
                }
                BufferedImage img=new BufferedImage(w,h,BufferedImage.TYPE_INT_ARGB);
                img.setRGB(0,0,w,h,rgb,2,w);
                rgb=null;
                image=img;
        	}catch(Exception exp2){
        		exp2.printStackTrace();
        	}
        }

        if(image!=null){

        	return new BQImage(image);
        }
        return null;
    }

    /**
     * ��source�����д���һ��ɱ��Image
     * 
     * @param source
     *            ԴImage����
     * @return ������4�IJ��ɱ�Image����
     * @since MIDP1.0
     */
    public static BQImage createImage(BQImage source) {
        java.awt.Image image = null;
        if (source.isMutable()) {
            image = new BufferedImage(source.getWidth(), source.getHeight(),
                    BufferedImage.TYPE_INT_ARGB);
            image.getGraphics().drawImage(source.getTrueImage(), 0, 0, null);
            return new BQImage(image);
        } else{
            return source;
        }
    }

    /**
     * ��iamge�д�����һ��ɱ��image
     * 
     * @param image
     *            ��Ҫ����image�Ķ���,��ΪԴ
     * @param x
     *            Ŀ���������Ͻ���image�е�xƫ��
     * @param y
     *            Ŀ���������Ͻ���image�е�yƫ��
     * @param width
     *            Ҫ������image�Ŀ��?     * @param height
     *            Ҫ������image�ĸ߶�
     * @param transform
     *            ��ԭ4���ǿ�image�Ƿ�������?     * @see Sprite����
     * @return image��x,y�㿪ʼ,width��,height�ߵ�һ����transform��ת������?     * @since MIDP2.0
     */
    public static BQImage createImage(BQImage image, int x, int y, int width,
            int height, int transform) {

        if ((transform & INVALID_TRANSFORM_BITS) != 0) {
            throw new IllegalArgumentException();
        }

        if (x < 0 || y < 0 || (x + width) > image.getWidth() || // throws NPE if
                // image is null
                (y + height) > image.getHeight() || width <= 0 || height <= 0) {
            throw new IllegalArgumentException();
        }

        if (x == 0 && y == 0 && width == image.getWidth()
                && height == image.getHeight()
                && transform == Sprite.TRANS_NONE) {

            return image;
        }
        if (image == null)
            return null;
        
        BufferedImage buffer = new BufferedImage(image.getWidth(), image
                .getHeight(), BufferedImage.TYPE_INT_ARGB);
        java.awt.Graphics g = buffer.getGraphics();
        g.drawImage(image.getTrueImage(), 0, 0, null, null);
        BufferedImage bufImg = buffer.getSubimage(x, y, width, height);
        buffer = null;
        if (transform == Sprite.TRANS_NONE)
            return new BQImage(bufImg);
        else if (transform == Sprite.TRANS_MIRROR_ROT180)// ���µߵ�
        {
            int[] temp = new int[width];
            int[] temp2 = new int[width];
            for (int i = 0; i < height / 2; i++) {
                bufImg.getRGB(0, i, width, 1, temp, 0, width);
                bufImg.getRGB(0, height - 1 - i, width, 1, temp2, 0, width);
                bufImg.setRGB(0, height - 1 - i, width, 1, temp, 0, width);
                bufImg.setRGB(0, i, width, 1, temp2, 0, width);
            }
            return new BQImage(bufImg);
        } else if (transform == Sprite.TRANS_MIRROR)// ���ҵߵ�
        {
            int temp = 0, temp2 = 0;
            for (int i = 0; i < height; i++) {
                for (int j = 0; j < width / 2; j++) {
                    temp = bufImg.getRGB(j, i);
                    temp2 = bufImg.getRGB(width - 1 - j, i);
                    bufImg.setRGB(j, i, temp2);
                    bufImg.setRGB(width - 1 - j, i, temp);
                }
            }
            return new BQImage(bufImg);
        } else if (transform == Sprite.TRANS_ROT180)// ˳ʱ����ת180��
        {
            int temp = 0, temp2 = 0;
            for (int j = 0; j < height / 2; j++) {
                for (int i = 0; i < width; i++) {
                    temp = bufImg.getRGB(i, j);
                    temp2 = bufImg.getRGB(width - 1 - i, height - 1 - j);
                    bufImg.setRGB(width - 1 - i, height - 1 - j, temp);
                    bufImg.setRGB(i, j, temp2);
                }
            }
            if ((height & 1) == 1) {
                int j = height / 2;
                for (int i = 0; i < width / 2; i++) {
                    temp = bufImg.getRGB(i, j);
                    temp2 = bufImg.getRGB(width - 1 - i, height - 1 - j);
                    bufImg.setRGB(width - 1 - i, height - 1 - j, temp);
                    bufImg.setRGB(i, j, temp2);
                }
            }
            return new BQImage(bufImg);
        } else if (transform == Sprite.TRANS_ROT90)// ˳ʱ��ѡ��90��
        {
            BufferedImage bufImg2 = new BufferedImage(height, width, bufImg
                    .getType());
            for (int j = 0; j < height; j++)
                for (int i = 0; i < width; i++)
                    bufImg2.setRGB(height - 1 - j, i, bufImg.getRGB(i, j));
            bufImg = null;
            return new BQImage(bufImg2);
        } else if (transform == Sprite.TRANS_ROT270)// ˳ʱ��ѡ��270��
        {

⌨️ 快捷键说明

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