Ver Mensaje Individual
  #5 (permalink)  
Antiguo 15/05/2010, 23:59
Avatar de chuidiang
chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 2 meses
Puntos: 454
Respuesta: setXORMode, setPaintMode, Borrar una gráfica de muchas

Hola:

En general borrar pintando encima es bastante complejo, precisamente por lo que te está sucediendo, se quedan puntitos sin borrar.

Si quieres hacerlo así, tienes que asegurarte muy mucho de que los puntos x,y que borras son exactamente los que pintas, haciendo exactamente las mismas cuentas o guardándolos en algún sitio para borrarlos después sin necesidad de calcularlos.

El xor mode presenta además otro problema. Imagina que pintas en modo normal el mismo pixel dos veces, porque han salido dos puntos x,y distintos pero al redondearlos, caen en el mismo pixel

(1.2, 2.3) ---> se pinta en pixel 1,2
(1.3, 2.4) ---> se pinta también en pixel 1,2

Como es modo de pintado normal, el punto queda pintado. Ahora quieres borrarlo echando las mismas cuentas y con xor. Vas a pintar dos veces con xor el mismo punto en pixels. El primer pintado te lo borrará, pero el segundo te lo volverá a pintar. Si estás echando exactamente las mismas cuentas para borrar (parece que sí), quizás los puntitos que te quedan son porque en el mismo pixel caen varios puntos distintos (un número par) de la gráfica.

No tengo muy claro lo que haces en el código, pero ¿no puedes borrar pintando del color del background?. Normalmente se borra con xor si se pinta también con xor, es una forma de respetar el fondo u otras gráficas que haya por debajo, pero hay que pintar también con xor, ya que si pintas de forma normal, "machacas" el fondo al pintar y al borrar con xor usando el mismo color, obtendrás directamente negro, no el fondo original que hubiera.

Es cualquier caso, es casi mejor borrar todo y repintarlo entero, o guardar cada trozo en un BufferedImage distinto y luego componerlos. Se supone que es menos eficiente, pero si el número de puntos de las gráficas que quieras pintar no es muy grande, puede no notarse diferencia y tienes que ver también si es más eficiente pintarlo todo cada vez o echar todas las cuentas que necesitarás para asegurarte del perfecto borrado.

Se bueno.
__________________
Apuntes Java
Wiki de Programación

Última edición por chuidiang; 16/05/2010 a las 00:16