可能重复:
I am making some parts of java image transparent by some code, it works fine on the laptop I made, but not on others, Why?下面的java代码用于将透明度放入特定的颜色,但在我的笔记本电脑上运行,但不会在其他具有更好显卡的笔记本电脑上运行,为什么?
图片测试:原始图片,
图片testt:应用透明度
在我的笔记本电脑后的图像,颜色我想使透明变得透明,测试以及测试都被渲染,但是如果未绘制测试图像,则绘制测试,但是测试不是。
与透明度绘制的简单图像的完整代码:
import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.image.FilteredImageSource;
import java.awt.image.ImageFilter;
import java.awt.image.ImageProducer;
import java.awt.image.RGBImageFilter;
import java.io.Serializable;
public class test extends Applet implements Runnable
{
public static Image makeColorTransparent(Image im, final Color color)
{
ImageFilter filter = new RGBImageFilter()
{
public int markerRGB = color.getRGB() | 0xFF000000; //color to make transparent
public final int filterRGB(int x, int y, int rgb)
{
if ((rgb | 0xFF000000) == markerRGB)
{
// Mark the alpha bits as zero - transparent
return 0x00FFFFFF & rgb;
}
else
{
// nothing to do
return rgb;
}
}
};
ImageProducer ip = new FilteredImageSource(im.getSource(), filter);
return Toolkit.getDefaultToolkit().createImage(ip);
}
Image test;
public void init()
{
setSize(600,600);
}
public void update (Graphics g) //overriding the update for double buffering
{
// initialize buffer
Image dbImage = createImage (this.getSize().width, this.getSize().height);
Graphics dbg = dbImage.getGraphics();
// clear screen in background
dbg.setColor (getBackground());
dbg.fillRect (0, 0, this.getSize().width, this.getSize().height);
// draw elements in background
dbg.setColor (getForeground());
paint (dbg);
// draw image on the screen
g.drawImage (dbImage, 0, 0, this);
}
public void paint(Graphics g)
{
test = getImage(getCodeBase(), "tt.gif");
Image testt = makeColorTransparent(test, Color.white);
g.drawImage (testt,0,0, this);
}
@Override
public void run() {
// TODO Auto-generated method stub
repaint();
}
}
难道有事可做以32/64位环境?我不确定64位Java是否使用64位颜色,但如果它确实如此,那么可能是您的问题,因为位掩码已被锁定。 – Accatyyc 2012-04-01 07:11:17
你确定,文件“tt。gif“在您启动应用程序的其他计算机上是否存在?并且在应用程序找到它所需的路径上? – yggdraa 2012-04-01 07:16:47
是的,tt.gif位于两台计算机的项目文件夹的bin文件夹中... – 2012-04-01 08:20:02