![]() |
Superpocision de imagen en Image.Canvas
Hola gente!!
tengo un problema dibujando en el canvas de un Timage. Supongamos que hago un rectangulo con borde negro y relleno (Brush) de color verde, ahora hago otro igual pero el nuevo rectangulo se situa en poco encima del primero, bueno la parte donde se "mezclan" en lugar de quedarse de color verde.. se pone de color blanco. Como puedo arreglar esto? ahora los pongo un ejemplo. |
:eek: prueba;
Talvez si nos copias (parte de) tu codigo podriamos saber que sucede :rolleyes: |
no hay problema, aca te subo el codigo del editor grafico para que lo veas como trabaja, ( y tb por si te sirve ;)) , capas puedas ver como hacer que no me pinte de blanco las figuras ( ojo , depende los colores, si superpongo una cuadrado azul con uno amarillo me aparece verde jeje).
saludos y gracias por el interes |
¿Para que usas esta linea?
|
Mirá, la uso por que asi lo encontre en un tutorial, lo probe y funciono, pero ahora que me lo pregunte busque un poquito mas y encontre este texto en una web : (es un poquito largo, perdon por eso)
"...De todos los modos de dibujo, el más socorrido y el que vamos a usar es el pmNotXor. Este modo tiene la particularidad que si dibujamos una línea, por ejemplo, y después vuelves a dibujar la línea de nuevo por encima de la que estaba, esta se borra, y queda como si no hubieras dibujada nada.Esto lo vamos a usar para crear el efecto que tienen los programas de dibujo, los cuales cuando dibujas un línea esta se se va dibujando a medida que mueves el ratón, y puedes ir cambiando el destino, y cuando dejas de dibujar (sueltas el botón por ejemplo), la línea queda dibujada desde el origen hasta donde esta el cursor del ratón...." Vos decis que el problema esta en usar ese modo del Pen.Mode ? a cual me recomendarias que cambie? Gracias!!! |
Prueba con esto
Asignale a la imagen o al objeto EN CANVAS lo siguiente imagen1.Canvas.brush.Style:=bsClear; |
segui investigando un poco mas sobre los modos del pen, y resulta que, como yo doy la opcion de elegir un color de relleno a la figura, el modo pmNotXor es el unico que me permite dibujar la figura con el color de relleno elegido.
si pongo otro modo no me dibuja el relleno como yo quiero , y poner brush.style:=bsclear hace que no tome el color de relleno, osea, me dibuja la figura sin color de relleno. El problema es que el modo pmNotXor, hace que si dibujo por ensima de otra figura, borre lo que estaba "abajo". Probe con todos los modos y con ninguno logro que dibuje la figura con el color de linea y relleno que yo elijo y que si dibujo por ensima de otra figura, la nueva figura quede "ensima" de la anterior pisandola, es decir, sin que se anule la parte superpuesta.... Les Agradesco la ayuda, voy a seguir probando y si alguno encuentra una solucion se lo agradeceria Saludos!!!! |
Ahora comprendo la cara de asombro de cHackAll :D, yo también me quedé a cuadros :D
El modo pmNotXor lo que hace básicamente es invertir el color que haya en ese punto, con sus detalles y demás.... pero básicamente eso. Lo que necesitas es usar pmCopy que será el que te pinta encima de otras piezas. Tendrás que adaptarlo, ya que al incluir sólo la unidad tuve que copiar y pegar a una aplicación de prueba. Tiene algunos fallitos, pero eso ya te lo dejo a ti. |
1 Archivos Adjunto(s)
Te agradezo la respuesta y la molestia que te tomaste, pero usar pmCopy, si bien "pisa" la imagen tiene un problema, supongamos que hago el rectangulo, pero no suelto el mouse, si vuelvo para atras (es decir, "giro" el mouse) el rectangulo se llena de rayitas, adjunto una imagen por si no se entiende lo que digo
|
claro, ese es el "fallito que te lo dejaba a tí" :p
Cuando se mueve el mouse, debes guardar la posición en la que se ha dibujado el cuadrado de rayitas (el que marca la selección) y usar pen xor o NotXor para borrar el cuadro anterior. Lo que te ocurre es igualito a cuando terminas una partida del solitario de windows :p La filosofía es simple: - Primero dibujas en modo pmcopy y dsdot para crear el cuadro - al mover el ratón hacia atrás, debes borrar el cuadro anterior, y eso se consigue pintando de nuevo en las coordenadas del antiguo cuadro con el modo NotXor y dsdot. Dicho de otra forma: borrar un cuadro es pintar con xor activado. Edito: las imágenes, puedes subirlas a www.imageshack.us por ejemplo y poner el link aquí. Saludos |
1 Archivos Adjunto(s)
:eek: :rolleyes:
|
Cita:
|
Gracias por el ejemplo! es justo lo que necesitaba, voy a adaptarlo a mi aplicacion!
Muchas Gracias! |
La franja horaria es GMT +2. Ahora son las 21:46:49. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi