6

アニメーションをSnakeCloneGameで動作させることができました。しかし、画像に基づく問題は、画像に透明度がないことです(円の画像の白い背景に注意してください。プログラミングに関して、これらの描画された画像に透明度を含めることができるようにするための修正はありますか?

これが私のコードとプログラムの出力を含む写真です。

ここに画像の説明を入力してください

PSちなみに、StackOverFlowに表示できないように見えるため、IMGコードの代わりに直接リンクを貼り付けることにしました。IMGコードの前に感嘆符を付けましたが、機能しなかったので、ここに直接リンクがあります。

4

5 に答える 5

10

他の答えが述べたように、最も簡単な方法は、おそらく背景が透明なPNG画像を使用することです(GIMPのような画像エディタでこれらを作成できます)。または、背景が無地のPNG画像に制限されている場合は、PNGの特定の色(白など)を透明に変更する方法の例を次に示します。

ここに画像の説明を入力してください

import java.awt.*;
import java.awt.image.*;
import javax.swing.*;

public class SimpleFrame extends JFrame {
   JPanel mainPanel = new JPanel() {
      ImageIcon originalIcon = new ImageIcon("~/Pictures/apple.png");

      ImageFilter filter = new RGBImageFilter() {
         int transparentColor = Color.white.getRGB() | 0xFF000000;

         public final int filterRGB(int x, int y, int rgb) {
            if ((rgb | 0xFF000000) == transparentColor) {
               return 0x00FFFFFF & rgb;
            } else {
               return rgb;
            }
         }
      };

      ImageProducer filteredImgProd = new FilteredImageSource(originalIcon.getImage().getSource(), filter);
      Image transparentImg = Toolkit.getDefaultToolkit().createImage(filteredImgProd);

      public void paintComponent(Graphics g) {
         g.setColor(getBackground());
         g.fillRect(0, 0, getSize().width, getSize().height);

         // draw the original icon
         g.drawImage(originalIcon.getImage(), 100, 10, this);
         // draw the transparent icon
         g.drawImage(transparentImg, 140, 10, this);
      }
   };

   public SimpleFrame() {
      super("Transparency Example");

      JPanel content = (JPanel)getContentPane();
      mainPanel.setBackground(Color.black);
      content.add("Center", mainPanel);
   }

   public static void main(String[] argv) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            SimpleFrame c = new SimpleFrame();
            c.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            c.setSize(280,100);
            c.setVisible(true);
         }
      });
   }
}
于 2012-12-31T05:02:02.363 に答える
4

画像の描画にペイントを使用しないでください。Paint.netやPhotoshopなどのアルファを使用する他のプログラムを使用してください...円を永遠に使用する場合は、g.drawOval(x、y、w、h)を使用できます。

于 2012-12-31T04:38:27.963 に答える
0
  public BufferedImage makeTransparentImage(BufferedImage br) {
    for (int i = 0; i < br.getHeight(); i++) {
        for (int j = 0; j < br.getWidth(); j++) {
            Color c = new Color(br.getRGB(j, i));
            int r = c.getRed();
            int b = c.getBlue();
            int g = c.getGreen();
            if ((r == 255 && b == 255 && g == 255)) {
                System.out.println("r g b " + r + g + b);
                br.setRGB(j, i, 0xFF000000);
            }
        }
    }
    return br;
}
于 2014-12-12T15:13:18.873 に答える
0

簡単な絵を描く場合、私が知っている最も簡単で最速の方法... Macrosoft PowerPointで絵を描き、[画像として保存]をクリックして背景を透明にします。次...

public class Node {
Image nodeImage[] = new Image[3];


public Node() {
    try {
        String address = "C:\\Users\\Desktop\\practice\\Simulation\\img\\";
        nodeImage[0] = ImageIO.read(new File(address + "Node_noVehicle.png"));
        nodeImage[1] = ImageIO.read(new File(address + "Node_setVehicle.png"));
        nodeImage[2] = ImageIO.read(new File(address + "Node_inVehicle.png"));
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

@Override
protected void paintComponent(Graphics g) {
  super.paintComponent(g);  
  Graphics2D g2dtemp = (Graphics2D) g.create();
  g2dtemp.drawImage(Node.nodeImage[0],(int)x,(int)y,width,height,this);
}

}

Macrosoft PowerPointで画像を描画し、[画像として保存]をクリックして背景を透明にします。

于 2019-08-30T06:28:37.987 に答える
-1

このようなARGBへのシンプルな使用タイプ

BufferedImage image = new BufferedImage(
                 width, height,
                 BufferedImage.TYPE_INT_ARGB);

私はそれがうまくいくことを願っています。

于 2015-04-27T12:37:04.510 に答える