4

我想按值传递 ImageIcon 实例,因为我们知道默认情况下它是按值传递引用。有没有办法解决这个问题?

ImageIcon img1 = new ImageIcon();
ImageIcon img2 = new ImageIcon();

img1 = img2;   // both share the same reference.......

我尝试使用 ImageIcongetImage()setImage().

但实际上我的程序包括将图像写入文件并且图像的质量似乎发生了变化。

简而言之,有没有一种方法可以使用函数

img1 = func(img2); // both do not share the same refernce. But the value is copied

至少我怎样才能在使用getImage()or时保持准确的图像质量setImage()

根据要求提供一些附加信息。

我正在使用的是 jpg 图像,并且我已将函数完全包含为 image = img1.getimage();
img2.setImage(图像);

我维护了一个单独的 java 类,它包含默认的 ImageIcon 包含 jpg 图像,我正在使用一些类方法从中检索图像

ImageIcon defaulticon = new ImageIcon("d:\\default.jpg");
public void getdefaultimage(ImageIcon img)
{
    img.setImage(defaulticon.getImage());
}

// The class which I maintained specifically for this purpose is a pure java class.
4

1 回答 1

7

如果您想复制 ImageIcon,您可以尝试:img2 = new ImageIcon(img1.getImage());我会确保我读入并写出 .png(无损)图像,而不是 .jpg(有损)图像。

但这应该与图像质量无关,我怀疑会解决你的问题。我担心您的问题出在未显示的代码的其他地方,您可能会通过调整图像大小或通过有损方法(例如使用 .jpg 文件)或通过减少每个像素的字节数来存储和检索图像来降低图像质量。 .

否则,如果您仍然遇到问题,请考虑告诉我们更多有关问题的信息,因为我再次担心问题更多在于图像质量的损失,而不是共享参考资料。

于 2012-06-30T18:07:23.937 回答