java picture 图片处理
package test;import java.awt.Color;import java.awt.Frame;import java.awt.Graphics;import java.awt.Image;import java.awt.MediaTracker;import java.awt.Panel;import java.awt.image.BufferedImage;import java.awt.image.MemoryImageSource;import java.awt.image.PixelGrabber;import javax.imageio.ImageIO;import java.io.File;import java.awt.Toolkit;/******************************************************************************* * //** * Title: LoonFramework *** Description:Java图形程序水纹倒映效果 *** Copyright: Copyright (c) 2007 *** Company: LoonFramework *** @author chenpeng * @email:ceponline@yahoo.com.cn * @version 0.1 */public class ImageWave extends Panel implements Runnable {/** *//** **/private static final long serialVersionUID = 1L;private Thread thread;private Image _image;private MediaTracker _mt;private int _delay;private Graphics _bg;private Image _screen;private boolean _playing;private int _pixels[];private int _mpixels[];private int _wpixels[];private final static int _WIDTH = 600;private final static int _HEIGHT = 700;private Image _images[];private int _sleep;private int _frame;/** *//** * 构造函数,注入背景图与延迟时间 ** @param img * @param delay */public ImageWave(Image img, int delay) {_delay = delay;init(img, delay);}public void init(Image img, int delay) {setBackground(Color.BLACK);_image = img;_mt = new MediaTracker(this);_mt.addImage(_image, 0);_mt.checkAll(true);_frame = 10;_screen = new BufferedImage(_WIDTH, _HEIGHT, 1);_bg = _screen.getGraphics();thread = new Thread(this);thread.start();}public void run() {Thread.currentThread().setPriority(1);long l = System.currentTimeMillis();while (Thread.currentThread() == thread)try {repaint();_sleep++;l += _delay;Thread.sleep(Math.max(0L, l - System.currentTimeMillis()));} catch (InterruptedException _ex) {return;}}/** *//** * 绘制图象 */public void paint(Graphics g) {if (!_playing) {if (_mt.checkAll()) {_playing = true;_bg.drawImage(_image, 0, 0, this);_pixels = new int[(_WIDTH * _HEIGHT) / 2];_mpixels = new int[(_WIDTH * _HEIGHT) / 2];_wpixels = new int[((_WIDTH * _HEIGHT) / 2) * _frame];PixelGrabber pixelgrabber = new PixelGrabber(_image, 0, 0,_WIDTH, _HEIGHT / 2, _pixels, 0, _WIDTH);try {pixelgrabber.grabPixels();} catch (InterruptedException _ex) {}blure();_images = new Image;for (int i = 0; i < _frame; i++)_images = createMirrorImage(i);}} else {if (_sleep > _frame - 1)_sleep = 0;_bg.drawImage(_images, 0, _HEIGHT / 2, this);}g.drawImage(_screen, 0, 0, this);}public void update(Graphics g) {paint(g);}/** *//** * 创建波纹反射图片 ** @param i * @return */Image createMirrorImage(int i) {int k1 = _HEIGHT / 2;int j1 = i * _WIDTH * k1;for (int k = 0; k < k1; k++) {int l = k * _WIDTH;int i1 = k1 - k - 1;i1 += (int) ((double) ((k * 5) / k1 + 2) * Math.sin((25.132741228718345D * (double) i1 * (double) i1)/ (double) k1 / (double) k1- (6.2831853071795862D * (double) i)/ (double) _frame));if (i1 < 0)i1 = 0;if (i1 > k1 - 1)i1 = k1 - 1;i1 *= _WIDTH;for (int j = 0; j < _WIDTH; j++)_wpixels = _mpixels;}Image image = createImage(new MemoryImageSource(_WIDTH, k1, _wpixels,j1, _WIDTH));return image;}/** *//** * 模糊化反射图片 **/void blure() {int l = _HEIGHT / 2;for (int j = 0; j < l; j++) {int k = j * _WIDTH;for (int i = 0; i < _WIDTH; i++) {int i1 = _pixels;int j1;if (i != _WIDTH - 1)j1 = _pixels;elsej1 = _pixels[(i + k) - 1];int k1 = 0;if (j != l - 1)k1 = _pixels;elsek1 = _pixels[(i + k) - _WIDTH];int l1 = 0;if (j != l - 1 && i != _WIDTH - 1)l1 = _pixels;elsel1 = _pixels;int i2 = (i1 >> 16 & 0xff) + (j1 >> 16 & 0xff)+ (k1 >> 16 & 0xff) + (l1 >> 16 & 0xff);int j2 = (i1 >> 8 & 0xff) + (j1 >> 8 & 0xff) + (k1 >> 8 & 0xff)+ (l1 >> 8 & 0xff);int k2 = (i1 & 0xff) + (j1 & 0xff) + (k1 & 0xff) + (l1 & 0xff);i2 >>= 3;j2 = (j2 >> 3) + (j2 >> 4);k2 = (k2 >> 3) + (k2 >> 4);_mpixels = i1 & 0xff000000 | i2 << 16 | j2 << 8 | k2;}}}public static void main(String[] args) {Frame frm = new Frame();frm.setSize(_WIDTH, _HEIGHT + 20);frm.setResizable(false);Image im = Toolkit.getDefaultToolkit().createImage("C:/media/pic/123.jpg");frm.add(new ImageWave(im, 100));frm.setVisible(true);}}
页:
[1]