Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-07-2011
cenedelphi cenedelphi is offline
Miembro
 
Registrado: feb 2008
Posts: 13
Poder: 0
cenedelphi Va por buen camino
rellenar de color rectangulo dibujado en bitmap

Cordial saludo
Estoy intentando rellenaar de color un rectanfulo dibujado
En un bitmap.
He conseguido dibujarlo sin relleno, ahora
Quiero imementar la funcionalidad de
Relleno con el color deseado. Estoy intentando
Utilizarr la funcion floodfill pero no lo he logrado aun
Alguien podria orientarme.

Gracias
Responder Con Cita
  #2  
Antiguo 30-07-2011
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
La clase TCanvas tiene un procedimiento llamado FillRect. El color con el que rellena el rectángulo es determinado por la propiedad Color del objeto Brush, también propiedad de TCanvas. Ése es el que utilizas para rellenar rectángulos. Pero me queda la duda de dónde has sacado eso de "FloodFill"?

Saludos,
Chris
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #3  
Antiguo 30-07-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

FloodFill es una función que ya existía en Turbo Pascal y sirve para pintar un área con la brocha actual.
Cita:
procedure FloodFill(X, Y: Integer; Color: TColor; FillStyle: TFillStyle);
Pintar un rectángulo amarillo con borde negro con FloodFill:
Código Delphi [-]
  with Canvas do
  begin
    Brush.Color:= clYellow;  
    Rectangle(100,100,180,180);
    FloodFill(110, 110, clBlack, fsSurface); 
  end;

Otra forma de hacer lo mismo:
Código Delphi [-]
var
  R: TRect;
begin
  with Canvas do
  begin
    Brush.Color:= clBlack;
    Rectangle(10,10,80,80);
    R.Left:= 11;
    R.Top:= 11;
    R.Right:= 79;
    R.Bottom:= 79;
    Brush.Color:= clYellow;
    FillRect(R);
  end;

O de igual modo:
Código Delphi [-]
  with Canvas do
  begin
    Brush.Color := clYellow;
    Brush.Style := bsSolid;
    Pen.Color:= clBlack;
    Rectangle(200, 200, 280, 280);
  end;


Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 31-07-2011 a las 00:02:29.
Responder Con Cita
  #4  
Antiguo 31-07-2011
cenedelphi cenedelphi is offline
Miembro
 
Registrado: feb 2008
Posts: 13
Poder: 0
cenedelphi Va por buen camino
Gracias
Ya pude dibujar y rellenar el rectangulo solo al momento de dibujarlo, ahora la
Funcionalidad requerida es poder seleccionar el rectangulo dibujado
Y rellenarlo al esstilo autoforma de microsoft word, ademas de poder agrupar y desagrupar los rectangulos



Cita:
Empezado por ecfisa Ver Mensaje
Hola.



FloodFill es una función que ya existía en Turbo Pascal y sirve para pintar un área con la brocha actual.


Pintar un rectángulo amarillo con borde negro con FloodFill:
Código Delphi [-]
  with Canvas do
  begin
    Brush.Color:= clYellow;  
    Rectangle(100,100,180,180);
    FloodFill(110, 110, clBlack, fsSurface); 
  end;

Otra forma de hacer lo mismo:
Código Delphi [-]
var
  R: TRect;
begin
  with Canvas do
  begin
    Brush.Color:= clBlack;
    Rectangle(10,10,80,80);
    R.Left:= 11;
    R.Top:= 11;
    R.Right:= 79;
    R.Bottom:= 79;
    Brush.Color:= clYellow;
    FillRect(R);
  end;

O de igual modo:
Código Delphi [-]
  with Canvas do
  begin
    Brush.Color := clYellow;
    Brush.Style := bsSolid;
    Pen.Color:= clBlack;
    Rectangle(200, 200, 280, 280);
  end;


Saludos.
Responder Con Cita
  #5  
Antiguo 01-08-2011
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por cenedelphi Ver Mensaje
Ya pude dibujar y rellenar el rectangulo solo al momento de dibujarlo, ahora la Funcionalidad requerida es poder seleccionar el rectangulo dibujado
Y rellenarlo al esstilo autoforma de microsoft word, ademas de poder agrupar y desagrupar los rectangulos
Por estas cosas, es por lo que sale a cuenta explicar los problemas completos desde un principio. Porque segun los pasos que se vayanb a realizar luego las soluciones son unas u otras.

El problema de dibujar en el canvas directamente tal y como lo has hecho, es que el resultado es similar a lo que obtienes cuando dibujas en el Paint (mspaint de Microsoft). Si dibujas un recuadro en el Paint, verás que después ya no puedes seleccionarlo. ¿Porqué?
Porque en ningun sitio almaceneas los objetos que dibujas, sólo los pintas directamente y una vez pintados te "olvidas" de ellos. No se si me explico.

Si lo que quieres hacer es dibujar objetos (cuadrados, círculos,...) y después poder seleccionarlos, modificarlos,... debes almacenar en algun sitio los objetos que has "dibujado". Una lista, por ejemplo.

El problema es que el enfoque es totalmente diferente.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 01-08-2011
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Si vas al FTP del Club, hay varios ejemplos que puedes revisar (con código incluído) que tienen este segundo enfoque que te comento.

Ejemplo29_Paint_Canvas.zip
Ejemplo30_dibujar_Canvas.zip
Ejemplo31_2d.zip
Ejemplo31_Editor_Grafico.zip
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.

Última edición por ecfisa fecha: 14-09-2014 a las 00:16:29. Razón: Actualizar enlaces
Responder Con Cita
  #7  
Antiguo 02-08-2011
cenedelphi cenedelphi is offline
Miembro
 
Registrado: feb 2008
Posts: 13
Poder: 0
cenedelphi Va por buen camino
Cita:
Empezado por Neftali Ver Mensaje
Por estas cosas, es por lo que sale a cuenta explicar los problemas completos desde un principio. Porque segun los pasos que se vayanb a realizar luego las soluciones son unas u otras.

El problema de dibujar en el canvas directamente tal y como lo has hecho, es que el resultado es similar a lo que obtienes cuando dibujas en el Paint (mspaint de Microsoft). Si dibujas un recuadro en el Paint, verás que después ya no puedes seleccionarlo. ¿Porqué?
Porque en ningun sitio almaceneas los objetos que dibujas, sólo los pintas directamente y una vez pintados te "olvidas" de ellos. No se si me explico.

Si lo que quieres hacer es dibujar objetos (cuadrados, círculos,...) y después poder seleccionarlos, modificarlos,... debes almacenar en algun sitio los objetos que has "dibujado". Una lista, por ejemplo.

El problema es que el enfoque es totalmente diferente.
gracias por las observaciones.
miré los ejemplos.

ejemplo 31

uno de los ejemplos presenta la declaración de la sigueinte clase:
Código Delphi [-]
 TFigura = class(TObject)
  private
    FAjustable: Boolean;
    FColor: TColor;
    FBoundsRect: TRect;
    FPicture: TPicture;
    FTipo: TTipoFigura;
  public
para modificar el color del relleno a un objeto instancia de esta clase.
habría que modificar el metodo dibujar. tambien he pensdo en crear
otra propiedad a la clase: propiedad FcolorRelleno, para tener un color para el borde y un color para el relleno.

Ya logre, rellenar las figuras despues de dibujada. alguna idea para optimizar la funcioanalidad.

gracias.


la clase quedaría así:
Código Delphi [-]
TFigura = class(TObject)
  private
   FAjustable: Boolean;
   FColor: TColor;
   FcolorRellenor: TColor;
   FBoundsRect: TRect;
   FPicture: TPicture;
   FTipo: TTipoFigura;
  public

Última edición por ecfisa fecha: 02-08-2011 a las 04:25:57. Razón: Etiquetas [delphi] [/delphi]
Responder Con Cita
  #8  
Antiguo 02-08-2011
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por cenedelphi Ver Mensaje
Ya logre, rellenar las figuras despues de dibujada. alguna idea para optimizar la funcioanalidad.
Supongo que el DoubleBuffered ya está activado.
POdrías modificar el método de selección (marcas de selección), para que se parezca más a lo que estamos acostumbrados.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
Respuesta



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
rellenar de color una imagen epolanco Gráficos 7 26-10-2010 19:12:15
rellenar completamente foto en un bitmap kapullok_2006 Gráficos 3 02-04-2007 16:08:22
Color de fondo de Bitmap arantzal Varios 1 15-01-2007 11:32:42
saber si he dibujado en DbGrid jonmendi OOP 5 10-01-2007 10:25:56
Se borra lo dibujado en el canvas, como evitarlo? [Gunman] Gráficos 21 12-11-2006 21:40:32


La franja horaria es GMT +2. Ahora son las 18:57:47.


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