2. String gifName为Gif文件在Jar中的相对路径。
(1)使用了两个静态方法
BufferedImage image=ImageIO.read(ClassLoader.getSystemResourceAsStream(gifName));
或者
Image image=Toolkit.getDefaultToolkit().getImage(ClassLoader.getSystemResource(gifName));
这两种方式可以成功地读取gif文件,但是对于gif动画,显示出来地是静态的。
(2)使用其他两个方法
Image image=Toolkit.getDefaultToolkit().getImage(this.getClass.getClassLoader().getResource(gifName));
再这种方式下动画可以正常显示了。
3. 使用JAVA对图片进行效果变换(像素级)
http://www.ismyway.com/Articles/SimpleImageEffect/index.htm
Image image = Toolkit.getDefaultToolkit().getImage(url);
当我们获得了图像后,可以通过java.awt.image.PixelGrabber包中的PixelGrabber方法来将图像中的像素信息完全读取出来,其用法如下:
PixelGrabber(Image img, int x, int y, int w, int h, int[] pix, int
off, int scansize)
其中img是要读取的图像,x/y是要读取图像中的左上角坐标,w/h分别是从x/y开始起的距离,其实x,y,w,h就是一个矩形,pix是保存像素的数组,off是读取图像时开始的位置,scansize是指扫描的宽度,一般来说和w相等。[还有其他的构造函数]
int width = image.getWidth();
int height = image.getHeight();
int size = width * height;
int[] pixels = new int[size];
pixelgrabber = new PixelGrabber(image, 0, 0, width, height, pixels, 0, width);
try {
pixelgrabber.grabPixels(); //读取像素入数组
}
catch (InterruptedException _ex) {}
当生成新的像素信息后,可以通过java.awt.image.MemoryImageSource包中的MemoryImageSource(int
w, int h, ColorModel cm, int[] pix, int off, int
scan)方法将像素数组对应到图像,并且可以用newPixels()方法来生成新的图像(具体用法可以参考JAVA API DOC)。
// client side
DataInputStream reader = new
DataInputStream(client.getSocket().getInputStream());
int width = reader.readInt();
int height = reader.readInt();
ImageData imageData = new ImageData(width,height,24,new
PaletteData(0xFF0000,0xFF00,0xFF));
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
int pixel;
pixel = reader.readInt();
imageData.setPixel(x,y,pixel);
}
}
reader.close();
Image img = new Image(Display.getDefault(),imageData);