效果图如下:
Java实现窗体中角色逐渐风化效果 

源码:
AirslakeImage.java
Java实现窗体中角色逐渐风化效果package org.test;
Java实现窗体中角色逐渐风化效果
Java实现窗体中角色逐渐风化效果
import java.awt.Button;
Java实现窗体中角色逐渐风化效果
import java.awt.Color;
Java实现窗体中角色逐渐风化效果
import java.awt.Frame;
Java实现窗体中角色逐渐风化效果
import java.awt.Graphics;
Java实现窗体中角色逐渐风化效果
import java.awt.Image;
Java实现窗体中角色逐渐风化效果
import java.awt.Panel;
Java实现窗体中角色逐渐风化效果
import java.awt.event.ActionEvent;
Java实现窗体中角色逐渐风化效果
import java.awt.event.ActionListener;
Java实现窗体中角色逐渐风化效果
import java.awt.event.WindowAdapter;
Java实现窗体中角色逐渐风化效果
import java.awt.event.WindowEvent;
Java实现窗体中角色逐渐风化效果
import java.awt.image.PixelGrabber;
Java实现窗体中角色逐渐风化效果
import java.util.Random;
Java实现窗体中角色逐渐风化效果
Java实现窗体中角色逐渐风化效果
import org.loon.framework.game.image.Bitmap;
Java实现窗体中角色逐渐风化效果
import org.loon.framework.game.image.LColor;
Java实现窗体中角色逐渐风化效果
/**
Java实现窗体中角色逐渐风化效果 * <p>Title: LoonFramework</p>
Java实现窗体中角色逐渐风化效果 * <p>Description:java实现图片风化效果</p>
Java实现窗体中角色逐渐风化效果 * <p>Copyright: Copyright (c) 2007</p>
Java实现窗体中角色逐渐风化效果 * <p>Company: LoonFramework</p>
Java实现窗体中角色逐渐风化效果 * 
@author chenpeng  
Java实现窗体中角色逐渐风化效果 * @email:[email][email protected][/email] 
Java实现窗体中角色逐渐风化效果 * 
@version 0.1
Java实现窗体中角色逐渐风化效果 
*/

Java实现窗体中角色逐渐风化效果
public class AirslakeImage extends Panel implements Runnable, ActionListener {
Java实现窗体中角色逐渐风化效果
Java实现窗体中角色逐渐风化效果    
/**
Java实现窗体中角色逐渐风化效果     * 
Java实现窗体中角色逐渐风化效果     
*/

Java实现窗体中角色逐渐风化效果    
private static final long serialVersionUID = 1L;
Java实现窗体中角色逐渐风化效果    
Java实现窗体中角色逐渐风化效果    
static final public int _WIDTH = 400;
Java实现窗体中角色逐渐风化效果    
Java实现窗体中角色逐渐风化效果    
static final public int _HEIGHT = 400;
Java实现窗体中角色逐渐风化效果    
Java实现窗体中角色逐渐风化效果    
private boolean _isRun=false;
Java实现窗体中角色逐渐风化效果
Java实现窗体中角色逐渐风化效果    
private Image _img;
Java实现窗体中角色逐渐风化效果    
Java实现窗体中角色逐渐风化效果    
private Image _screen;
Java实现窗体中角色逐渐风化效果    
Java实现窗体中角色逐渐风化效果    
private Graphics _back;
Java实现窗体中角色逐渐风化效果
Java实现窗体中角色逐渐风化效果    
private int _imgWidth;
Java实现窗体中角色逐渐风化效果    
private int _imgHeight;
Java实现窗体中角色逐渐风化效果
Java实现窗体中角色逐渐风化效果    
private Fraction[] _fractions;
Java实现窗体中角色逐渐风化效果
Java实现窗体中角色逐渐风化效果    
private Thread _timer;
Java实现窗体中角色逐渐风化效果
Java实现窗体中角色逐渐风化效果    
private Button _meganteButton;
Java实现窗体中角色逐渐风化效果    
private Button _revivalButton;
Java实现窗体中角色逐渐风化效果
Java实现窗体中角色逐渐风化效果
Java实现窗体中角色逐渐风化效果    
private Random _rand = new Random();
Java实现窗体中角色逐渐风化效果
Java实现窗体中角色逐渐风化效果    
public AirslakeImage() {
Java实现窗体中角色逐渐风化效果        
Java实现窗体中角色逐渐风化效果        _screen
=new Bitmap(_WIDTH,_HEIGHT).getImage();
Java实现窗体中角色逐渐风化效果        
Java实现窗体中角色逐渐风化效果        _back
=_screen.getGraphics();
Java实现窗体中角色逐渐风化效果        
Java实现窗体中角色逐渐风化效果        setSize(_WIDTH, _HEIGHT);
Java实现窗体中角色逐渐风化效果
Java实现窗体中角色逐渐风化效果        _meganteButton 
= new Button("破碎图片");
Java实现窗体中角色逐渐风化效果        _meganteButton.addActionListener(
this);
Java实现窗体中角色逐渐风化效果        add(_meganteButton);
Java实现窗体中角色逐渐风化效果
Java实现窗体中角色逐渐风化效果        _revivalButton 
= new Button("还原图片");
Java实现窗体中角色逐渐风化效果        _revivalButton.addActionListener(
this);
Java实现窗体中角色逐渐风化效果        add(_revivalButton);
Java实现窗体中角色逐渐风化效果        _revivalButton.setEnabled(
false);
Java实现窗体中角色逐渐风化效果
Java实现窗体中角色逐渐风化效果        loadImage(
"role.png");
Java实现窗体中角色逐渐风化效果
Java实现窗体中角色逐渐风化效果        init(_img);
Java实现窗体中角色逐渐风化效果    }

Java实现窗体中角色逐渐风化效果    
Java实现窗体中角色逐渐风化效果    
/**
Java实现窗体中角色逐渐风化效果     * 初始化image图像,分解其中像素
Java实现窗体中角色逐渐风化效果     * 
@param _img
Java实现窗体中角色逐渐风化效果     
*/

Java实现窗体中角色逐渐风化效果    
private void init(Image _img) {
Java实现窗体中角色逐渐风化效果        
if (_timer != null{
Java实现窗体中角色逐渐风化效果            _timer
=null;
Java实现窗体中角色逐渐风化效果            _isRun
=false;
Java实现窗体中角色逐渐风化效果        }

Java实现窗体中角色逐渐风化效果        _fractions 
= new Fraction[_imgWidth * _imgHeight];
Java实现窗体中角色逐渐风化效果        PixelGrabber pg 
= new PixelGrabber(_img, 00, _imgWidth, _imgHeight, true);
Java实现窗体中角色逐渐风化效果        
try {
Java实现窗体中角色逐渐风化效果            pg.grabPixels();
Java实现窗体中角色逐渐风化效果        }
 catch (InterruptedException e) {
Java实现窗体中角色逐渐风化效果            e.printStackTrace();
Java实现窗体中角色逐渐风化效果        }

Java实现窗体中角色逐渐风化效果        
int pixel[] = (int[]) pg.getPixels();
Java实现窗体中角色逐渐风化效果     
Java实现窗体中角色逐渐风化效果        
//重新封装像素
Java实现窗体中角色逐渐风化效果
        for (int y = 0; y < _imgHeight; y++{
Java实现窗体中角色逐渐风化效果            
for (int x = 0; x < _imgWidth; x++{
Java实现窗体中角色逐渐风化效果                
int n = y * _imgWidth + x;
Java实现窗体中角色逐渐风化效果                _fractions[n] 
= new Fraction();
Java实现窗体中角色逐渐风化效果                
double angle = _rand.nextInt(360);
Java实现窗体中角色逐渐风化效果                
double speed = 10.0 / _rand.nextInt(30);
Java实现窗体中角色逐渐风化效果                _fractions[n].x 
=   x+90;
Java实现窗体中角色逐渐风化效果                _fractions[n].y 
=   y+20;
Java实现窗体中角色逐渐风化效果                _fractions[n].vx 
= Math.cos(angle * Math.PI / 180* speed;
Java实现窗体中角色逐渐风化效果                _fractions[n].vy 
= Math.sin(angle * Math.PI / 180* speed;
Java实现窗体中角色逐渐风化效果                _fractions[n].color 
= pixel[n];
Java实现窗体中角色逐渐风化效果                _fractions[n].countToCrush 
= x / 6 + _rand.nextInt(10);
Java实现窗体中角色逐渐风化效果            }

Java实现窗体中角色逐渐风化效果        }

Java实现窗体中角色逐渐风化效果    }

Java实现窗体中角色逐渐风化效果    
Java实现窗体中角色逐渐风化效果    
public void update(Graphics g){
Java实现窗体中角色逐渐风化效果        paint(g);
Java实现窗体中角色逐渐风化效果    }

Java实现窗体中角色逐渐风化效果    
Java实现窗体中角色逐渐风化效果    
public void paint(Graphics g){
Java实现窗体中角色逐渐风化效果        
//变更背景色
Java实现窗体中角色逐渐风化效果
        _back.setColor(Color.WHITE);
Java实现窗体中角色逐渐风化效果        
//清空背景
Java实现窗体中角色逐渐风化效果
        _back.fillRect(00, _WIDTH, _HEIGHT);
Java实现窗体中角色逐渐风化效果
Java实现窗体中角色逐渐风化效果        
for (int n = 0; n < _imgWidth * _imgHeight; n++{
Java实现窗体中角色逐渐风化效果            
int x = (int) _fractions[n].x;
Java实现窗体中角色逐渐风化效果            
int y = (int) _fractions[n].y;
Java实现窗体中角色逐渐风化效果            LColor color
=LColor.getLColor(_fractions[n].color);
Java实现窗体中角色逐渐风化效果            
//纯黑色区域不读取
Java实现窗体中角色逐渐风化效果
            if(!LColor.equals(color, LColor.fromArgb(0,0,0))){
Java实现窗体中角色逐渐风化效果            
//获得rgb三色
Java实现窗体中角色逐渐风化效果
            int red = color.R;
Java实现窗体中角色逐渐风化效果            
int green = color.G;
Java实现窗体中角色逐渐风化效果            
int blue = color.B;
Java实现窗体中角色逐渐风化效果            _back.setColor(
new Color(red, green, blue));
Java实现窗体中角色逐渐风化效果            
//绘制
Java实现窗体中角色逐渐风化效果
            _back.drawLine(x, y, x, y);
Java实现窗体中角色逐渐风化效果            }

Java实现窗体中角色逐渐风化效果        }

Java实现窗体中角色逐渐风化效果        g.drawImage(_screen, 
00this);
Java实现窗体中角色逐渐风化效果    }

Java实现窗体中角色逐渐风化效果
Java实现窗体中角色逐渐风化效果    
public void actionPerformed(ActionEvent e) {
Java实现窗体中角色逐渐风化效果        
if (e.getSource() == _meganteButton) {
Java实现窗体中角色逐渐风化效果            execute();
Java实现窗体中角色逐渐风化效果            _meganteButton.setEnabled(
false);
Java实现窗体中角色逐渐风化效果            _revivalButton.setEnabled(
true);
Java实现窗体中角色逐渐风化效果        }
 else if (e.getSource() == _revivalButton) {
Java实现窗体中角色逐渐风化效果            init(_img);
Java实现窗体中角色逐渐风化效果            repaint();
Java实现窗体中角色逐渐风化效果            _meganteButton.setEnabled(
true);
Java实现窗体中角色逐渐风化效果            _revivalButton.setEnabled(
false);
Java实现窗体中角色逐渐风化效果        }

Java实现窗体中角色逐渐风化效果    }

Java实现窗体中角色逐渐风化效果
Java实现窗体中角色逐渐风化效果
Java实现窗体中角色逐渐风化效果
Java实现窗体中角色逐渐风化效果    
/**
Java实现窗体中角色逐渐风化效果     * 加载图像
Java实现窗体中角色逐渐风化效果     * 
@param filename
Java实现窗体中角色逐渐风化效果     
*/

Java实现窗体中角色逐渐风化效果    
private void loadImage(String filename) {
Java实现窗体中角色逐渐风化效果        Bitmap bitmap 
= new Bitmap(("./image/"+filename).intern());
Java实现窗体中角色逐渐风化效果        
//替换透明区域颜色(象素化后,转为rgb形式的透明区域色值将显示为r=0,g=0,b=0),可以直接用pixel识别透明区域,也可以替换或跳过该区域)
Java实现窗体中角色逐渐风化效果
        _img=bitmap.getImage();
Java实现窗体中角色逐渐风化效果        _imgWidth 
= _img.getWidth(this);
Java实现窗体中角色逐渐风化效果        _imgHeight 
= _img.getHeight(this);
Java实现窗体中角色逐渐风化效果    }

Java实现窗体中角色逐渐风化效果
Java实现窗体中角色逐渐风化效果
Java实现窗体中角色逐渐风化效果  
Java实现窗体中角色逐渐风化效果    
/**
Java实现窗体中角色逐渐风化效果     * 执行操作
Java实现窗体中角色逐渐风化效果     *
Java实现窗体中角色逐渐风化效果     
*/

Java实现窗体中角色逐渐风化效果    
private void execute() {
Java实现窗体中角色逐渐风化效果        _timer 
= new Thread(this);
Java实现窗体中角色逐渐风化效果        _timer.start();
Java实现窗体中角色逐渐风化效果        _isRun
=true;
Java实现窗体中角色逐渐风化效果    }

Java实现窗体中角色逐渐风化效果    
Java实现窗体中角色逐渐风化效果    
class Fraction {
Java实现窗体中角色逐渐风化效果        
//图片在窗体中x
Java实现窗体中角色逐渐风化效果
        public double x;
Java实现窗体中角色逐渐风化效果        
//图片在窗体中y
Java实现窗体中角色逐渐风化效果
        public double y;
Java实现窗体中角色逐渐风化效果        
//显示图x
Java实现窗体中角色逐渐风化效果
        public double vx;
Java实现窗体中角色逐渐风化效果        
//显示图y
Java实现窗体中角色逐渐风化效果
        public double vy;
Java实现窗体中角色逐渐风化效果        
//color
Java实现窗体中角色逐渐风化效果
        public int color; 
Java实现窗体中角色逐渐风化效果        
//变形颗粒数量
Java实现窗体中角色逐渐风化效果
        public int countToCrush; 
Java实现窗体中角色逐渐风化效果    }

Java实现窗体中角色逐渐风化效果    
Java实现窗体中角色逐渐风化效果        
public void run() {
Java实现窗体中角色逐渐风化效果            
while(_isRun){
Java实现窗体中角色逐渐风化效果            
for (int n = 0; n < _imgWidth * _imgHeight; n++{
Java实现窗体中角色逐渐风化效果                
if (_fractions[n].countToCrush <= 0
Java实现窗体中角色逐渐风化效果                    _fractions[n].x 
+= _fractions[n].vx;
Java实现窗体中角色逐渐风化效果                    _fractions[n].y 
+= _fractions[n].vy;
Java实现窗体中角色逐渐风化效果                    _fractions[n].vy 
+= 0.1
Java实现窗体中角色逐渐风化效果                }
 else {
Java实现窗体中角色逐渐风化效果                    _fractions[n].countToCrush
--;
Java实现窗体中角色逐渐风化效果                }

Java实现窗体中角色逐渐风化效果             
Java实现窗体中角色逐渐风化效果            }

Java实现窗体中角色逐渐风化效果            
//间隔
Java实现窗体中角色逐渐风化效果
            try {
Java实现窗体中角色逐渐风化效果                Thread.sleep(
60);
Java实现窗体中角色逐渐风化效果            }
 catch (InterruptedException e) {
Java实现窗体中角色逐渐风化效果                e.printStackTrace();
Java实现窗体中角色逐渐风化效果            }

Java实现窗体中角色逐渐风化效果            repaint();
Java实现窗体中角色逐渐风化效果            }

Java实现窗体中角色逐渐风化效果        }

Java实现窗体中角色逐渐风化效果    
Java实现窗体中角色逐渐风化效果    
Java实现窗体中角色逐渐风化效果    
public static void main(String[]args){
Java实现窗体中角色逐渐风化效果        java.awt.EventQueue.invokeLater(
new Runnable() {
Java实现窗体中角色逐渐风化效果            
public void run() {
Java实现窗体中角色逐渐风化效果                Frame frm 
= new Frame("java实现图片风化效果");
Java实现窗体中角色逐渐风化效果                frm.add(
new AirslakeImage());
Java实现窗体中角色逐渐风化效果                frm.setResizable(
false);
Java实现窗体中角色逐渐风化效果                frm.setSize(_WIDTH, _HEIGHT);
Java实现窗体中角色逐渐风化效果                frm.addWindowListener(
new WindowAdapter(){
Java实现窗体中角色逐渐风化效果                    
public void windowClosing(WindowEvent e){
Java实现窗体中角色逐渐风化效果                        System.exit(
0);
Java实现窗体中角色逐渐风化效果                    }

Java实现窗体中角色逐渐风化效果                }
);
Java实现窗体中角色逐渐风化效果                frm.setLocationRelativeTo(
null);
Java实现窗体中角色逐渐风化效果                frm.setVisible(
true);
Java实现窗体中角色逐渐风化效果            }

Java实现窗体中角色逐渐风化效果        }
);
Java实现窗体中角色逐渐风化效果    }

Java实现窗体中角色逐渐风化效果}





本文转自 cping 51CTO博客,原文链接:http://blog.51cto.com/cping1982/130055

相关文章: