下記のプログラムで、画像を徐々に薄くして非表示にできました。
これの逆で、徐々に濃くしながら表示させようとしたんですが、何故か、少し表示されてからまた消えてしまいました。ちゃんとフェードインするにはどうすれば良いでしょうか?
また、画像の不透明度をもっと効率よく変更することは可能ですか?
私のPC(win10 32bit 1.33GHz 2.00GB)だと少し動作が遅いです。
実際にダウンロードして確認していただけます。
徐々に濃くしていく方のプログラムは、
pixel[i] = pixel[i] & (0x00FFFFFF + a * 0x1000000);
を
pixel[i] = pixel[i] & (0x00FFFFFF + (255 - a) * 0x1000000);
に変更しただけです。
java
1import java.awt.*; 2import java.awt.image.*; 3import java.awt.event.*; 4import javax.swing.*; 5import javax.swing.Timer; 6import java.io.*; 7 8class Test extends JFrame implements ActionListener{ 9 10 public static void main(String[] args){ 11 12 Test f = new Test(); 13 f.setTitle("Test"); 14 f.setBounds(100,100,500,250); 15 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 16 f.setVisible(true); 17 } 18 19 JLabel label; 20 Timer timer; 21 ImageIcon icon; 22 Image img; 23 int width; 24 int height; 25 int[] pixel; 26 int a; 27 boolean click = true; 28 29 Test(){ 30 31 JPanel base = new JPanel(); 32 base.setLayout(new BoxLayout(base, BoxLayout.X_AXIS)); 33 add(base); 34 35 icon = new ImageIcon("img.png"); 36 label = new JLabel(icon); 37 base.add(label); 38 39 JButton btn = new JButton("start"); 40 btn.addActionListener(this); 41 base.add(btn); 42 } 43 44 public void actionPerformed(ActionEvent e){ 45 46 if(click){ 47 48 click = false; 49 timer = new Timer(50, new FadeOut()); 50 a = 255; 51 img = icon.getImage(); 52 width = icon.getIconWidth(); 53 height = icon.getIconHeight(); 54 pixel = new int[width * height]; 55 PixelGrabber pg = new PixelGrabber(img, 0, 0, width, height, pixel, 0, width); 56 try{ 57 58 pg.grabPixels(); 59 } catch(InterruptedException ex){ 60 61 ex.printStackTrace(); 62 } 63 64 timer.start(); 65 } 66 } 67 68 private class FadeOut implements ActionListener{ 69 70 public void actionPerformed(ActionEvent e){ 71 72 a -= 15; 73 System.out.println("Alpha:" + a); 74 int color = new Color(255,255,255,0).getRGB(); 75 for(int i = 0; i < pixel.length; i ++) if(pixel[i] != color) pixel[i] = pixel[i] & (0x00FFFFFF + a * 0x1000000); 76 img = Toolkit.getDefaultToolkit().createImage(new MemoryImageSource(width, height, pixel, 0, width)); 77 label.setIcon(new ImageIcon(img)); 78 if(a == 0){ 79 80 timer.stop(); 81 System.out.println("stop"); 82 click = true; 83 } 84 } 85 } 86}
参考にしたサイト:イメージの特定色を透明にしたい(アイコンなど)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/03/18 01:27
2016/03/19 15:01