Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.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 使用BuffereImage的两种类似方法,一种工作,一种不工作。为什么?_Java_Bufferedimage - Fatal编程技术网

Java 使用BuffereImage的两种类似方法,一种工作,一种不工作。为什么?

Java 使用BuffereImage的两种类似方法,一种工作,一种不工作。为什么?,java,bufferedimage,Java,Bufferedimage,我尝试了将BuffereImage的一种颜色更改为不可见的方法。 我自己找不到解决办法,所以我请求您的帮助。 以下是我的方法: public static BufferedImage makeWithoutColor(BufferedImage img, Color col) { BufferedImage img1 = img; BufferedImage img2 = new BufferedImage(img1.getWidth(), img1.getHeight(), B

我尝试了将BuffereImage的一种颜色更改为不可见的方法。
我自己找不到解决办法,所以我请求您的帮助。
以下是我的方法:

public static BufferedImage makeWithoutColor(BufferedImage img, Color col)
{
    BufferedImage img1 = img;
    BufferedImage img2 = new BufferedImage(img1.getWidth(), img1.getHeight(), BufferedImage.TYPE_INT_ARGB);
    Graphics2D g = img2.createGraphics();
    g.setComposite(AlphaComposite.Src);
    g.drawImage(img1, null, 0, 0);
    g.dispose();
    for(int i = 0; i < img2.getWidth(); i++)
    {
        for(int j = 0; i < img2.getHeight(); i++)
        {
            if(img2.getRGB(i, j) == col.getRGB())
            {
                img2.setRGB(i, j, 0x8F1C1C);
            }
        }
    }
    return img2;
}
publicstaticbufferedimage生成不带颜色(BufferedImage img,Color col)
{
缓冲图像img1=img;
BuffereImage img2=新的BuffereImage(img1.getWidth(),img1.getHeight(),BuffereImage.TYPE_INT_ARGB);
Graphics2D g=img2.createGraphics();
g、 setComposite(AlphaComposite.Src);
g、 drawImage(img1,null,0,0);
g、 处置();
对于(int i=0;i
这是我读过的教程中的一篇

public static BufferedImage makeColorTransparent(BufferedImage ref, Color color) {
    BufferedImage image = ref;
    BufferedImage dimg = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_ARGB);
    Graphics2D g = dimg.createGraphics();
    g.setComposite(AlphaComposite.Src);
    g.drawImage(image, null, 0, 0);
    g.dispose();
    for(int i = 0; i < dimg.getHeight(); i++) {
        for(int j = 0; j < dimg.getWidth(); j++) {
            if(dimg.getRGB(j, i) == color.getRGB()) {
            dimg.setRGB(j, i, 0x8F1C1C);
            }
        }
    }
    return dimg;
}
publicstaticbufferedimage使颜色透明(BufferedImage ref,Color-Color){
BuffereImage图像=ref;
BuffereImage dimg=新的BuffereImage(image.getWidth(),image.getHeight(),buffereImage.TYPE_INT_ARGB);
Graphics2D g=dimg.createGraphics();
g、 setComposite(AlphaComposite.Src);
g、 drawImage(image,null,0,0);
g、 处置();
对于(int i=0;i
您的错误是这一行:

for(int j = 0; i < img2.getHeight(); i++)
for(int j=0;i
应该是:

for(int j = 0; j < img2.getHeight(); j++)
//             ^                     ^ as Ted mentioned...
for(int j=0;j
我假设“不可见”的意思是希望使一种颜色透明。您将无法使用此方法进行此操作,因为
setRGB
不会影响alpha通道。您最好使用图像过滤器。以下是从以下方面采取的方法:


这将使任何具有指示RGB颜色和任何透明度的像素变为相同颜色的完全透明像素。

是否有错误消息?您是否尝试过复制/粘贴教程并将
图像
更改为
img1
?好的,那么哪一个有效,哪一个无效?如果其中一个正在工作,那么问题/高度/宽度的顺序是相反的,这可能是问题吗?不,当我画这张图片时,它看起来好像什么都没做,第二个也在工作。可能也应该是
j++
。谢谢你,真遗憾我没有看到它。
public static Image makeWithoutColor(BufferedImage img, Color col)
{
    ImageFilter filter = new RGBImageFilter() {

        // the color we are looking for... Alpha bits are set to opaque
        public int markerRGB = col.getRGB() | 0xFF000000;

        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);
}