4

デフォルトでは値渡し参照であることがわかっているため、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(画像);

jpg画像を含むデフォルトのImageIconを保持する別のJavaクラスを維持しており、次のようなクラスメソッドのいくつかを使用してそこから画像を取得しています

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());。.jpg(不可逆)画像ではなく、.png(可逆)画像を読み込んで書き出すようにします。

しかし、これは画質とは関係がないはずであり、私はあなたの問題を解決するとは思えません。問題は、表示されていないコードの他の場所にあると思います。画像のサイズを変更したり、.jpgファイルなどの不可逆的な方法で画像を保存および取得したり、ピクセルあたりのバイト数を減らしたりして、画像の品質を低下させている可能性があります。 。

それ以外の場合でも問題が解決しない場合は、問題について詳しく教えてください。これも、参照の共有よりも画質の低下に問題があるのではないかと心配しているためです。

于 2012-06-30T18:07:23.937 に答える