gpt4 book ai didi

java - 设置 BufferedImage 的单个像素会在另一个 BufferedImage 中设置相同的像素。为什么?

转载 作者:行者123 更新时间:2023-12-02 05:34:47 27 4
gpt4 key购买 nike

我在编写另一个项目时遇到了这个问题,但我已将代码简化为直接受到所述问题影响的代码。

EntryPoint.java

package replaced.with.real.package.in.code.at.compile.time;

import java.awt.image.BufferedImage;
import java.util.Random;

public class EntryPoint {

public static void main(String[] args) {
BufferedImage a = new BufferedImage(1024, 768, BufferedImage.TYPE_INT_RGB);
BufferedImage b = new BufferedImage(1024, 768, BufferedImage.TYPE_INT_RGB);

a = Util.genOriginBlue();
b = Util.genOriginBlue();
a.setRGB(new Random(0L).nextInt(500), new Random(1L).nextInt(500), 0xffffff);
System.out.println(a == b);
}

}

Util.java

package replaced.with.real.package.in.code.at.compile.time;

import java.awt.image.BufferedImage;


public class Util
{
static BufferedImage oB;

public static BufferedImage genOriginBlue()
{
if(oB == null)
{
oB = new BufferedImage(1024, 768, BufferedImage.TYPE_INT_RGB);
oB.setRGB(0, 0, 1, 1, new int[] {255}, 0, 1);
}
return oB;
}
}

这会打印“true”,表明 BufferedImage a 和 BufferedImage b 相同。看来我以相同的方式生成它们,直到以 'a.setRG(....' 开头的行使 BufferedImage 变得不同,我不会期望这样的输出。如果我开始像这样循环代码,尤其是代码,情况会变得更糟每次都会生成不同的输出 BufferedImage,这正是我在上述项目中所做的。

预先感谢您提供的任何帮助。

另外,这是我在这里发布的第二个问题,所以如果我做得不对,请说出来。

干杯。

最佳答案

    BufferedImage a = new BufferedImage(1024, 768, BufferedImage.TYPE_INT_RGB);
BufferedImage b = new BufferedImage(1024, 768, BufferedImage.TYPE_INT_RGB);

上面的代码行什么都不做,因为在下面的两行代码中,您将“a”和“b”变量的值重置为从 Util.GenOriginBlue() 方法返回的值。

    a = Util.genOriginBlue();
b = Util.genOriginBlue();

在您的 Util 类中,您可以使用:

static BufferedImage oB;

这意味着您将只有一个 BufferedImage 实例。因此,代码中的 if 语句只会执行一次,然后第二次调用该方法时,您只需返回对 BufferedImage 的相同引用。

您需要在 Util.genOriginBlue() 方法中创建 BufferedImage 的新实例。因此,摆脱静态“ob”变量并摆脱 if 语句。然后,您的 BufferedImage 在您创建时将是相同的,但您将能够单独更改像素。

关于java - 设置 BufferedImage 的单个像素会在另一个 BufferedImage 中设置相同的像素。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25100611/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com