java - ImageIcon引用麻烦

标签 java swing pass-by-reference pass-by-value imageicon

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

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

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

我尝试使用 ImageIcon 的 getImage()setImage()

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

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

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

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

根据要求提供一些额外信息。

我正在使用的是一张 jpg 图像,我已经包含了完全相同的功能 image = img1.getimage();
img2.setImage(图片);

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

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.

最佳答案

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

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

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

关于java - ImageIcon引用麻烦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11276306/

相关文章:

java - APK 签名无效

java - 如何使用高密度屏幕上可见的绘制点

java - 寻找一种保留两位小数而不四舍五入的方法

java - 使用另一个 Swing JPanel 初始化 Swing JPanel

java - 使用特定列对 Jtable 项目进行排序 - JAVA

c# - 通过引用传递 : child of multiple interfaces

java - 如何使用parcelable将线程类对象从一个 Activity 传递到另一个 Activity

java - 为具有 Restful 服务和 Swing 特性的基于 Maven 的动态项目构建可执行的 war/jar

flutter - 如何在 Flutter 中传递回调

c++ - 对指针和常量兼容性的引用