2017-11-30 8 views
1

私は何かペイント方法に間違っていると思うが、私はそれを把握することはできません。Javaイメージの透明度(イメージが失われた)

public void paint(Graphics g) { 
     screenImage = createImage(1280, 720); 
     screenGraphic = screenImage.getGraphics(); 
     screenDraw(screenGraphic); 
     g.drawImage(screenImage, 0, 0, null); 
    } 

    public void screenDraw(Graphics g) { 
     g.drawImage(BG, 0, 0, null); 
     if(isMainScreen) { 
      g.drawImage(changedImageAlpha(selectedImage, 120), 130, 360, null); 
     } 
     paintComponents(g); 
     this.repaint(); 
    } 

    public Image changedImageAlpha(Image image, int trans) { 
     BufferedImage img = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_ARGB); 
     Graphics2D g = img.createGraphics(); 
     Composite c = AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, .5f); 
     g.setComposite(c); 
     g.drawImage(image, 0, 0, null); 
     g.dispose(); 

     int colorMask = 0x00FFFFFF; 
     int alphaShift = 24; 
     for(int y=0; y<img.getHeight(); y++){ 
      for(int x=0; x<img.getWidth(); x++) { 
       img.setRGB(x, y, (img.getRGB(x, y) & colorMask) | (trans << alphaShift)); 
      } 
     } 
     return img; 
    } 

BGはscreenImageです。 私はイメージが透明なイメージであると期待しました。 透明な画像がいくつか表示されますが、その中には何も表示されません。それは透明な透明な画像であり、色はありません。 何が問題なのでしょうか?

答えて

1

あなたの前の質問にthe answerのコメントとして、答えに示唆されたビット操作よりも簡単だったと言いました。

しかし、ではなくを意味しましたが、これに加えて

だから、これは:

public Image changedImageAlpha(Image image, int trans) { 
    BufferedImage img = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_ARGB); 
    Graphics2D g = img.createGraphics(); 
    Composite c = AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, .5f); 
    g.setComposite(c); 
    g.drawImage(image, 0, 0, null); 
    g.dispose(); 

    return img; 
} 

を先端として:

public Image changedImageAlpha(Image image, int trans) { 
    BufferedImage img = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_ARGB); 
    Graphics2D g = img.createGraphics(); 
    Composite c = AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, .5f); 
    g.setComposite(c); 
    g.drawImage(image, 0, 0, null); 
    g.dispose(); 

    int colorMask = 0x00FFFFFF; 
    int alphaShift = 24; 
    for(int y=0; y<img.getHeight(); y++){ 
     for(int x=0; x<img.getWidth(); x++) { 
      img.setRGB(x, y, (img.getRGB(x, y) & colorMask) | (trans << alphaShift)); 
     } 
    } 
    return img; 
} 

は、このである必要があります他の人が提供しているコードを理解するようにしてください。 'Cut &貼り付け'のプログラミングは通常失敗して終了します。

関連する問題