TA的每日心情 | 开心 2021-3-12 23:18 |
---|
签到天数: 2 天 [LV.1]初来乍到
|

- 程序:
- 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 = 300;
- private final static int _HEIGHT = 378;
- 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[_frame];
- for (int i = 0; i < _frame; i++)
- _images[i] = createMirrorImage(i);
- }
- } else {
- if (_sleep > _frame - 1)
- _sleep = 0;
- _bg.drawImage(_images[_sleep], 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[j1 + j + l] = _mpixels[j + i1];
- }
- 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[i + k];
- int j1;
- if (i != _WIDTH - 1)
- j1 = _pixels[i + k + 1];
- else
- j1 = _pixels[(i + k) - 1];
- int k1 = 0;
- if (j != l - 1)
- k1 = _pixels[i + k + _WIDTH];
- else
- k1 = _pixels[(i + k) - _WIDTH];
- int l1 = 0;
- if (j != l - 1 && i != _WIDTH - 1)
- l1 = _pixels[i + k + _WIDTH + 1];
- else
- l1 = _pixels[i + k];
- 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[i + k] = i1 & 0xff000000 | i2 << 16 | j2 << 8 | k2;
- }
- }
- }
- public static void main(String[] args) {
- Frame frm = new Frame();
- frm.setTitle("Java图形程序水纹倒映效果(由Loonframework提供)");
- frm.setSize(_WIDTH, _HEIGHT + 20);
- frm.setResizable(false);
- Image im=Toolkit.getDefaultToolkit().createImage("back.jpg");
- frm.add(new ImageWave(im, 100));
- frm.setVisible(true);
- }
- }
复制代码
源码下载:http://file.javaxxz.com/2014/11/2/235541140.zip |
|