📄 bqimage.java
字号:
/*
* 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 + -