2011-07-13 6 views
1

"画像を切り抜く"には次のコードを使用していますが、透過性は無視されるため、このメソッドから取得されたBufferedImagesは完全に不透明で、.getARGB()または.setARGB()メソッド。これを回避するにはどうしたらいいですか?私はBufferedImageのセクションを取得するために.getRGB()と.setRGB()を使用していますが、どのように透明度もコピーしますか?

 private static BufferedImage getCroppedImage(BufferedImage wholeImage, int xPos, int yPos, int width, int height) 
     { 
      GraphicsEnvironment graphEnv = GraphicsEnvironment.getLocalGraphicsEnvironment(); 
      BufferedImage croppedImage = null; 

      try 
       { 
        GraphicsDevice screen = graphEnv.getDefaultScreenDevice(); 
        GraphicsConfiguration gc = screen.getDefaultConfiguration(); 
        croppedImage = gc.createCompatibleImage(width, height, Transparency.BITMASK); 
       } 
      catch (Exception e) 
       { 
        new errorWindow(e, "crop, in Images"); 
       } 

      if (croppedImage == null) 
       { 
        croppedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); 
       } 

      int[] pixels = new int[width * height]; 
      wholeImage.getRGB(xPos, yPos, width, height, pixels, 0, width); 
      croppedImage.setRGB(0, 0, width, height, pixels, 0, width); 

      return croppedImage; 
     } 
+1

代わりに['Transparency.TRANSLUCENT'](http://download.oracle.com/javase/6/docs/api/java/awt/Transparency.html#TRANSLUCENT)を使用してみてください。 – mre

+0

違いはありません。ピクセルあたりの透明度を取得し、設定する方法が必要です。BufferedImageのフォーマットは大丈夫です(.png) – Troyseph

+1

SORRY @mreが正しいです、Transparency.TRANSLUCENTが前進しています。両方の場所でそれを変更してください! – Troyseph

答えて

関連する問題