Problema de referencia de ImageIcon

Quiero pasar una instancia de ImageIcon por valor, ya que sabemos que, de forma predeterminada, pasa la referencia por valor. ¿Hay alguna manera de solucionar este problema?

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

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

Intenté usar ImageIcon's getImage() y setImage().

Pero en realidad mi programa incluye escribir una imagen en un archivo y la calidad de la imagen parece cambiar.

En resumen, ¿hay alguna forma en que al usar una función

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

Al menos, ¿cómo puedo conservar la calidad de imagen exacta al usar getImage() or setImage()?

Alguna información adicional según la solicitud.

La que estoy usando es una imagen jpg, y he incluido la función exactamente como image = img1.getimage();
img2.setImage(imagen);

He mantenido una clase Java separada donde contiene el ImageIcon predeterminado que contiene una imagen jpg y estoy recuperando la imagen usando algunos de los métodos de clase como

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.

preguntado el 30 de junio de 12 a las 18:06

ni hace falta. Creo que el problema de "pasar por referencia/valor" no es un problema aquí, y el verdadero problema es la calidad de la imagen. -

@HovercraftFullOfEels leyó la última publicación... -

@akp: ¿cuál es la última publicación? La calidad de imagen es no degradado al pasar por referencia. Solo se degrada por la forma en que se lee o se escribe desde una fuente, o qué tipo de imagen contiene la imagen, o si intenta cambiar el tamaño de la imagen o las otras características de la imagen, cosas que está sin decirnos. -

Considere la posibilidad de crear y publicar un sscce eso demuestra su problema porque hasta ahora creo que tendremos poca suerte de poder ayudarlo dada la información que se ha publicado. -

1 Respuestas

Si desea copiar un ImageIcon, puede intentar: img2 = new ImageIcon(img1.getImage()); Me aseguraría de leer y escribir imágenes .png (sin pérdida), no imágenes .jpg (con pérdida).

Pero esto no debería afectar la calidad de la imagen y dudo que resuelva su problema. Me temo que su problema radica en otra parte del código que no se muestra, que puede estar degradando la calidad de su imagen cambiando el tamaño de la imagen o almacenándola y recuperándola a través de métodos con pérdida, como con archivos .jpg, o reduciendo la cantidad de bytes por píxel. .

De lo contrario, si aún tiene problemas, considere contarnos más sobre los problemas porque nuevamente me temo que el problema es más con la pérdida de calidad de imagen que con el intercambio de referencias.

Respondido el 30 de junio de 12 a las 19:06

El principal problema es el tamaño de la imagen y sí... por supuesto... la claridad........... - Arjun KP

@akp: deberá darnos más detalles, ya que ninguno de los códigos y la información que ha proporcionado nos dirá por qué esto es un problema. - Aerodeslizador lleno de anguilas

mi problema principal es pasar un objeto ImageIcon por valor... evitando el problema de referencia... probé el método que publicaste en tu respuesta... tengo un poco de un problema con respecto al tamaño y la calidad de la imagen...... - Arjun KP

@akp: sigue insistiendo en "pasar un objeto ImageIcon por valor" cuando su verdadero problema probablemente no tenga nada que ver con esto. ¿Por qué crees que esto importa? - Aerodeslizador lleno de anguilas

@akp: Más información sobre el remuestreo en el artículo citado aquí. - basurero

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.