📄 dissolvehack.java
字号:
import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.awt.image.*;import java.awt.geom.*;public class DissolveHack { public static void main(String[] args) { final JFrame frame = new JFrame("Dissolve Hack"); JButton quit = new JButton("Quit"); quit.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { new Dissolver().dissolveExit(frame); } }); frame.getContentPane().add(quit); frame.pack(); frame.setLocation(300,300); frame.setSize(400,400); frame.setVisible(true); }}class Dissolver extends JComponent implements Runnable { public Dissolver() { } public void dissolveExit(JFrame frame) { try { this.frame = frame; Robot robot = new Robot(); // cap screen w/ frame to frame buffer Rectangle frame_rect = frame.getBounds(); frame_buffer = robot.createScreenCapture(frame_rect); // hide frame frame.setVisible(false); // cap screen w/o frame Dimension screensize = Toolkit.getDefaultToolkit().getScreenSize(); Rectangle screen_rect = new Rectangle(0,0,screensize.width, screensize.height); screen_buffer = robot.createScreenCapture(screen_rect); // create big window w/o decorations fullscreen = new Window(new JFrame()); fullscreen.setSize(screensize); fullscreen.add(this); this.setSize(screensize); fullscreen.setVisible(true); // start animation new Thread(this).start(); } catch (Exception ex) { System.out.println(ex); ex.printStackTrace(); } } Frame frame; Window fullscreen; BufferedImage frame_buffer; BufferedImage screen_buffer; int count; public void paint(Graphics g) { Graphics2D g2 = (Graphics2D)g; // draw the screen, offset in case the window isn't at 0,0 g.drawImage(screen_buffer,-fullscreen.getX(),-fullscreen.getY(),null); // draw the frame Composite old_comp = g2.getComposite(); Composite fade = AlphaComposite.getInstance(AlphaComposite.SRC_OVER,1.0f-((float)count)/20f); g2.setComposite(fade); g2.drawImage(frame_buffer,frame.getX(),frame.getY(),null); g2.setComposite(old_comp); } public void run() { try { count = 0; Thread.currentThread().sleep(100); for(int i=0; i<20; i++) { count = i; fullscreen.repaint(); Thread.currentThread().sleep(100); } } catch (InterruptedException ex) { } System.exit(0); } }class SpinDissolver extends Dissolver { public void paint(Graphics g) { Graphics2D g2 = (Graphics2D)g; // draw the screen, offset in case the window isn't at 0,0 g.drawImage(screen_buffer,-fullscreen.getX(),-fullscreen.getY(),null); // save the current transform AffineTransform old_trans = g2.getTransform(); // move to the upper left hand corner of the frame g2.translate(frame.getX(), frame.getY()); // move the frame off towards the left g2.translate(-((count+1) * (frame.getX()+frame.getWidth())/20),0); // shrink the frame float scale = 1f / ((float)count+1); g2.scale(scale,scale); // rotate around the center g2.rotate(((float)count)/3.14/1.3, frame.getWidth()/2, frame.getHeight()/2); // finally draw the frame g2.drawImage(frame_buffer,0,0,null); // restore the current transform g2.setTransform(old_trans); } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -