キャンバスに画像を描画すると、画像を囲む白いピクセルが画像の境界にもあります。これを防ぐ方法に関するヒントはありますか?
3 に答える
1
import java.awt.*;
import java.awt.image.BufferedImage;
import javax.swing.*;
import javax.imageio.ImageIO;
import java.net.URL;
class ImageTransparencyByColor {
public static BufferedImage getTransparentImage(
BufferedImage image, Color transparent) {
// must have a transparent image
BufferedImage img = new BufferedImage(
image.getWidth(),image.getHeight(),BufferedImage.TYPE_INT_ARGB);
Graphics2D g= img.createGraphics();
for (int x=0; x<img.getWidth(); x++) {
for (int y=0; y<img.getHeight(); y++) {
if (image.getRGB(x,y)!=transparent.getRGB()) {
img.setRGB( x,y, image.getRGB(x,y) );
}
}
}
g.dispose();
return img;
}
public static void main(String[] args) throws Exception {
URL url = new URL ("http://www.gravatar.com/avatar" +
"/ab5193916ccf152f96b0a69323e934a1?s=128&d=identicon&r=PG");
final BufferedImage trans = getTransparentImage(
ImageIO.read(url), Color.WHITE);
Runnable r = new Runnable() {
@Override
public void run() {
JLabel gui = new JLabel(new ImageIcon(trans));
JOptionPane.showMessageDialog(null, gui);
}
};
SwingUtilities.invokeLater(r);
}
}
于 2012-12-17T11:46:01.633 に答える
0
.png 画像を使用します。.gif 画像には完全な透過性しかありません。
于 2012-12-17T04:55:07.453 に答える
0
代わりに JPanel に画像を挿入してください。Canvas は重量級のコンポーネントです。または、Canvas のアルファを変更してみてください。this.setBackground(new Color( 0,0,0,0 );
編集:これを試してください。イメージのクラスを作成します。Image を初期化する方法は重要ではありません。
public class MyImage extends JPanel {
private final URL IMG_DIRECTORY = Main.class.getResource("/res/yourImage.png"); // Image directory
public MyImage() {
try {
img = ImageIO.read(IMG_DIRECTORY);
} catch (Exception e) {
e.printStackTrace();
}
this.setSize(img.getWidth(null), img.getHeight(null);
}
@Override
public void paint(Graphics g) {
g.drawImage(img, 0, 0, null);
}
Frame クラスで image クラスを宣言しMyImage yourImage = new MyImage();
、それを ContentPane に追加します。
于 2012-12-17T05:15:48.377 に答える