Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何去除图像中的颜色_Java_Image_Swing_Image Processing_Transparency - Fatal编程技术网

Java 如何去除图像中的颜色

Java 如何去除图像中的颜色,java,image,swing,image-processing,transparency,Java,Image,Swing,Image Processing,Transparency,我希望我的图像,一个缓冲图像,有一个透明的背景,我首先尝试使用png,然后是gif,然后我尝试使用imageFilters,但我也不能成功,所以现在我决定使用一个简单的jpeg,将背景设置为一种颜色,然后去掉那种颜色,再次,我认为imageFilters适用于此,但我不知道如何使用它们,我想去掉的颜色是0xff00d8(洋红) 有人能帮上忙吗,或者举个例子?jpeg不支持透明。确保缓冲图像也支持透明度: BufferedImage bi = new BufferedImage(w, h, Buf

我希望我的图像,一个缓冲图像,有一个透明的背景,我首先尝试使用png,然后是gif,然后我尝试使用imageFilters,但我也不能成功,所以现在我决定使用一个简单的jpeg,将背景设置为一种颜色,然后去掉那种颜色,再次,我认为imageFilters适用于此,但我不知道如何使用它们,我想去掉的颜色是0xff00d8(洋红)


有人能帮上忙吗,或者举个例子?

jpeg
不支持透明。确保缓冲图像也支持透明度:

BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
TYPE_INT_ARGB
中的A代表α,α是不透明度的度量

您需要将像素值设置为0x00000000以使其透明

//Load the image
BufferedImage in = ImageIO.read(img);
int width = in.getWidth(), height = in.getHeight();
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = bi.createGraphics();
g.drawImage(in, 0, 0, null);
g.dispose();

//Change the color
int colorToChange = 0xff00d8;
for (int x=0;x<width;x++)
    for (int y=0;y<height;y++)
        if(bi.getRGB(x,y)==colorToChange)
            bi.setRGB(x,y,0x00FFFFFF&colorToChange);

bi.save(new File("out.png"));
//加载图像
BuffereImage in=ImageIO.read(img);
int width=in.getWidth(),height=in.getHeight();
BuffereImage bi=新的BuffereImage(宽度、高度、BuffereImage.TYPE_INT_ARGB);
Graphics2D g=bi.createGraphics();
g、 drawImage(in,0,0,null);
g、 处置();
//换颜色
int colorToChange=0xff00d8;

对于(int x=0;x
jpeg
不支持透明度。请确保缓冲图像也支持透明度:

BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
TYPE_INT_ARGB
中的A代表α,α是不透明度的度量

您需要将像素值设置为0x00000000以使其透明

//Load the image
BufferedImage in = ImageIO.read(img);
int width = in.getWidth(), height = in.getHeight();
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = bi.createGraphics();
g.drawImage(in, 0, 0, null);
g.dispose();

//Change the color
int colorToChange = 0xff00d8;
for (int x=0;x<width;x++)
    for (int y=0;y<height;y++)
        if(bi.getRGB(x,y)==colorToChange)
            bi.setRGB(x,y,0x00FFFFFF&colorToChange);

bi.save(new File("out.png"));
//加载图像
BuffereImage in=ImageIO.read(img);
int width=in.getWidth(),height=in.getHeight();
BuffereImage bi=新的BuffereImage(宽度、高度、BuffereImage.TYPE_INT_ARGB);
Graphics2D g=bi.createGraphics();
g、 drawImage(in,0,0,null);
g、 处置();
//换颜色
int colorToChange=0xff00d8;

对于(intx=0;x我设法用JWindow修复了它,不过还是要感谢Jason的帮助

我有一个扩展JPanel的半透明窗格:

public TranslucentPane() {
    setOpaque(false);
}

@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g); 

    Graphics2D g2d = (Graphics2D) g.create();
    g2d.setComposite(AlphaComposite.SrcOver.derive(0.0f));
    g2d.setColor(getBackground());
    g2d.fillRect(0, 0, getWidth(), getHeight());

}
然后在我的主UI中执行此操作:

robotUI roboUI = new robotUI();
    roboUI.setBackground(new Color(0,0,0,0));
我的内容窗格是:

TranslucentPane pane = new TranslucentPane();

我希望这足以让任何人理解

我使用JWindow修复了它,不过,谢谢你Jason的帮助

我有一个扩展JPanel的半透明窗格:

public TranslucentPane() {
    setOpaque(false);
}

@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g); 

    Graphics2D g2d = (Graphics2D) g.create();
    g2d.setComposite(AlphaComposite.SrcOver.derive(0.0f));
    g2d.setColor(getBackground());
    g2d.fillRect(0, 0, getWidth(), getHeight());

}
然后在我的主UI中执行此操作:

robotUI roboUI = new robotUI();
    roboUI.setBackground(new Color(0,0,0,0));
我的内容窗格是:

TranslucentPane pane = new TranslucentPane();

我希望这足以让任何人理解

好吧,现在我回到png,添加了ARGB,但如果我这样做,我所有的图像都会变成灰色,所以我假设我需要做更多的事情,但我不知道如何从精确的像素中选择颜色,并将该颜色的所有像素都变成0x00000000,我看了很多如何做,但找不到任何细节g、 你能帮我吗?非常感谢你的帮助谢谢,我试过了,但是保存不起作用,试着把你称之为bi的图像,而不是原始图像放进去也不起作用,并且在透明的地方显示出相同的颜色你怎么输出图像?我首先这样读图像:image=ImageIO.read(新文件(“adam.png”);然后我通过一个像这样扩展JPanel的ImagePanel输出它:ImagePanel ImagePanel=new ImagePanel(bi);它使用这个方法:public void paintComponent(Graphics g){super.paintComponent(g);g.drawImage(image,0,0,getWidth(),getHeight(),this);}JPanel本机不支持透明背景。请看,好吧,现在我回到png,添加了ARGB,但如果我这样做,我所有的图像都会变成灰色,所以我认为我需要做更多的事情,但我不知道如何从精确的像素中选择颜色,并将该颜色的所有像素都变成0x00000000,我看了很多方法,但无法确定d任何东西,你能帮我吗?非常感谢你的帮助谢谢,我试过了,但是保存不起作用,试着把你称为bi的图像,而不是原始图像放进去也不起作用,并且在透明的地方显示出相同的颜色。你是如何输出图像的?我第一次这样读图像:image=ImageIO.read(新文件(“adam.png”);然后我通过一个像这样扩展JPanel的ImagePanel输出它:ImagePanel ImagePanel=new ImagePanel(bi);它使用这个方法:public void paintComponent(Graphics g){super.paintComponent(g);g.drawImage(image,0,0,getWidth(),getHeight(),this);}JPanel本机不支持透明背景。请参见,作为一个答案,这没有提供足够的详细信息让其他人从中受益。您是否可以包括一个代码示例?作为一个答案,这没有提供足够的详细信息让其他人从中受益。您是否可以包括一个代码示例?