FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Cambiar colores a la imagen
Hola, a todos, antes de continuar ofresco una disculpa por no aplicar correctamente la guia de estilo, no la encontre en el sitio, espero alguien me diga donde se encuentra para no cometer este error nuevamente.
Tengo un programa que esta abajo en el cual existe un Timage con un bmp el cual tiene una imagen en color negro el cual quiero que el usuario cambie el color de la imagen de acuerdo al color que elija con el ColorDialog, La primera vez si hace el cambio de negro a cualquier color, despues de esto ya no me cambia a otro color aunque guardo la referencia del color anterior. Podria alguien decirme que estoy haciendo mal. Gracias a todos de antemano por su colaboracion Atenamente Alejandro Maravert unit color; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Image1: TImage; Button1: TButton; ColorDialog1: TColorDialog; Panel1: TPanel; Label1: TLabel; procedure Button1Click(Sender: TObject); procedure Panel1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; Guia : Integer; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var antesColor, actualColor : Tcolor; i,j : Integer; begin if Guia = 0 then begin guia := 1; actualColor := Panel1.Color; antesColor := 0; end else begin antesColor := actualColor; actualColor := Panel1.Color; end; for i := 0 to (Image1.Height - 1) do begin for j := 0 to (Image1.Width - 1) do begin // es del color que quiero cambiar? if (Image1.Canvas.Pixels[i,j] = antesColor) then begin Image1.Canvas.Pixels [i,j] := actualColor; end; end; end; end; procedure TForm1.Panel1Click(Sender: TObject); var a: Tcolor; begin ColorDialog1.color := panel1.color; if Colordialog1.Execute then begin panel1.Color:= ColorDialog1.Color; // label1.caption := inttostr (panel1.Color); end; end; procedure TForm1.FormCreate(Sender: TObject); begin Guia := 0; end; end. |
#2
|
|||
|
|||
1.- usa un Tbitmap + Tpaintbox
2.- usa TBitmap.scanline Es el lio de formato de pixel, supongo que quieres trabajar sobre 24bits, asi que mejor si tu Tbitmap.handeltype:=bmDIB , para que sea independiente de la resolución actual de la pantalla. |
#3
|
||||
|
||||
Cita:
__________________
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. |
#4
|
|||
|
|||
maravert, creo que tu código no funciona porque la variable actualcolor la declaras dentro del evento onclick del botón, de tal forma que, com se inicia cada vez que lo pulsas, no conservará los datos que le pasastes en el anterior clic de panel1.color. Declárala en la parte private de la form.
Saludos. |
|
|
|