2012-06-30 53 views
4

我想按值傳遞一個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(image);

我一直保持着它擁有默認的ImageIcon方含JPG圖像的單獨的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. 
+2

[Java不支持通過引用](http://javadude.com/articles/passbyvalue.htm) – gobernador

+0

也不需要。我認爲「通過參考/價值」這個問題在這裏是一個非問題,真正的問題是圖像質量問題之一。 –

+0

@HovercraftFullOfEels閱讀最新帖子... –

回答

7

檢索圖像如果你想複製ImageIcon你可以嘗試:img2 = new ImageIcon(img1.getImage());我會確保我讀入並寫出.png(無損)圖像,而不是.jpg(有損)圖像。

但是這應該對圖像質量沒有影響,我懷疑是否會解決您的問題。我擔心你的問題存在於代碼中沒有顯示的其他地方,你可能會通過調整圖像大小或者通過有損方法(如使用.jpg文件)或通過減少每像素字節數來存儲和檢索圖像質量來降低圖像質量。

否則,如果您仍然有問題,請考慮告訴我們更多關於這些問題的信息,因爲我再次擔心問題更多是由於圖像質量的損失而不是共享引用。

+0

主要問題是圖像的大小和是的......當然......清晰度........... –

+3

@akp:你需要給我們更多的細節,因爲沒有你提供的代碼和信息會告訴我們我們爲什麼這是一個問題。 –

+0

我的主要問題是通過值傳遞一個ImageIcon對象.......避免參考問題......我嘗試了方法,因爲你張貼在你的答案.......我已經有點對圖像大小和質量的問題...... –