Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Gráficos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-11-2008
pablopessoa pablopessoa is offline
Miembro
 
Registrado: may 2008
Ubicación: Argentina
Posts: 162
Poder: 16
pablopessoa Va por buen camino
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.

Última edición por pablopessoa fecha: 02-12-2008 a las 00:28:57.
Responder Con Cita
  #2  
Antiguo 30-11-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
prueba;

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
 Canvas.Pen.Width := 2;
 Canvas.Pen.Color := clBlack;
 Canvas.Brush.Color := clGreen;
 Canvas.Rectangle(100, 100, 200, 200);
 Canvas.Rectangle(150, 150, 250, 250);
end;

Talvez si nos copias (parte de) tu codigo podriamos saber que sucede
__________________
RTFM > STFW > Foro > Truco > Post > cHackAll > KeBugCheckEx
Responder Con Cita
  #3  
Antiguo 30-11-2008
pablopessoa pablopessoa is offline
Miembro
 
Registrado: may 2008
Ubicación: Argentina
Posts: 162
Poder: 16
pablopessoa Va por buen camino
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

Última edición por pablopessoa fecha: 02-12-2008 a las 00:28:57.
Responder Con Cita
  #4  
Antiguo 30-11-2008
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
¿Para que usas esta linea?
Código Delphi [-]
Pen.Mode := pmNotXor;
Responder Con Cita
  #5  
Antiguo 01-12-2008
pablopessoa pablopessoa is offline
Miembro
 
Registrado: may 2008
Ubicación: Argentina
Posts: 162
Poder: 16
pablopessoa Va por buen camino
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!!!
Responder Con Cita
  #6  
Antiguo 01-12-2008
pcicom pcicom is offline
Miembro
 
Registrado: may 2003
Ubicación: MONTERREY MEXICO
Posts: 253
Poder: 21
pcicom Va por buen camino
Prueba con esto

Asignale a la imagen o al objeto EN CANVAS lo siguiente

imagen1.Canvas.brush.Style:=bsClear;
__________________
Poco ha de saber el que no pregunta.. Yo por eso soy un pregunton
Responder Con Cita
  #7  
Antiguo 01-12-2008
pablopessoa pablopessoa is offline
Miembro
 
Registrado: may 2008
Ubicación: Argentina
Posts: 162
Poder: 16
pablopessoa Va por buen camino
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!!!!
Responder Con Cita
  #8  
Antiguo 01-12-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Ahora comprendo la cara de asombro de cHackAll , yo también me quedé a cuadros

Código Delphi [-]
Procedure TForm1.Cuadrado (Const X,Y :integer);
Begin
  With Canvas Do
  Begin
    Pen.Mode := pmCopy;
    MoveTo (Origen.X,Origen.Y);
    Rectangle (Origen.X,Origen.Y,Punto.X,Punto.Y);
    MoveTo (Origen.X,Origen.Y);
    Rectangle (Origen.X,Origen.Y,X,Y);
  end; //Final del With Image1.Canvas
end;


procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
If Button = mbLeft Then
      Begin
          Pintando := True;
          Canvas.MoveTo (X,Y);
          Origen.X := X;
          Origen.Y := Y;
      end;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
If Pintando Then
  begin
    Punto := Point (X,Y);
    ultimo := Point(x,y);
    BorrarUltimo := True;
    Canvas.Pen.Style := psDot;
    Canvas.Pen.Mode := pmCopy;
    Canvas.Rectangle(Origen.x, Origen.Y,x,y);

  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Pintando := False;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
If Button = mbLeft Then
  Begin
    Pintando := False;
    Canvas.pen.style := pssolid;
    Canvas.Rectangle(Origen.x, Origen.Y, ultimo.x, ultimo.Y);
    Cuadrado(x,y);
  end;
end;
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.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #9  
Antiguo 02-12-2008
pablopessoa pablopessoa is offline
Miembro
 
Registrado: may 2008
Ubicación: Argentina
Posts: 162
Poder: 16
pablopessoa Va por buen camino
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
Archivos Adjuntos
Tipo de Archivo: zip Dibujo.zip (14,7 KB, 20 visitas)
Responder Con Cita
  #10  
Antiguo 02-12-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
claro, ese es el "fallito que te lo dejaba a tí"

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

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
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #11  
Antiguo 02-12-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Archivos Adjuntos
Tipo de Archivo: zip noPen.zip (1,2 KB, 32 visitas)
__________________
RTFM > STFW > Foro > Truco > Post > cHackAll > KeBugCheckEx
Responder Con Cita
  #12  
Antiguo 02-12-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Cita:
Empezado por cHackAll Ver Mensaje
eso es trampa
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #13  
Antiguo 02-12-2008
pablopessoa pablopessoa is offline
Miembro
 
Registrado: may 2008
Ubicación: Argentina
Posts: 162
Poder: 16
pablopessoa Va por buen camino
Gracias por el ejemplo! es justo lo que necesitaba, voy a adaptarlo a mi aplicacion!
Muchas Gracias!
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Guardad Canvas De Un Image Con La propiedad stretch:=true gulder Gráficos 9 28-11-2008 17:26:03
Imagen de un Image a otro joHn je@N Gráficos 1 06-06-2005 11:06:00
¿como asignar una imagen de una BD a un Image? scotex Conexión con bases de datos 3 20-02-2005 13:16:14
Como elimino una imagen de un Image maravert Gráficos 1 27-09-2004 00:43:28
Ruta de Imagen de un Image pkbza Conexión con bases de datos 1 10-05-2004 16:47:58


La franja horaria es GMT +2. Ahora son las 00:29:25.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi