Pregunta: | 7672 - COMO LLEVO LAS IMAGES DE COLORES A ESCALA GRIS |
Autor: | Anibal Guerra Cuellar |
Necesito este dato y otros mas para realizar un sofware de caracter educativo y cientifico, me seria de gran ayuda su respuesta |
Respuesta: | Israel Renato Macip Millán |
Pues la espuesta aunque se ve complicada es muy sencilla, recordarás que las imagenes a color estan formadas por una triada de colores primarios comunmente conocida como RGB (Red Green Blue), pues estos colores estan dentro de la paleta basica de 0 a 255, lo que hay que hacer es llevar a cada parte del RGB a un corrimiento para que surta el efecto, a continuación te escribo el código para dicha funcion.
Cabe mencionar tambien que existen varios metodos, de acuerdo a la velocidad de trabajo, ya que unos trabajan la imagen como matriz, (punto por punto), o vectores (por líneas) o por placas (matrices). El siguiente metodo esta aplicado al punto private { Private declarations } public { Public declarations } end; var Form1: TForm1; ImagenAbierta: boolean; pixf : integer; Ncol, Nren : integer; bm:TBitMap; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); var let, nom : string; s : string; begin if (OPD.Execute) then begin nom := OPD.FileName; bm.LoadFromFile(nom); Image1.Picture.Bitmap.Assign(bm); ImagenAbierta := true; GroupBox1.Caption:= nom; Button2.Enabled := true; Ncol := Image1.Width; Nren := Image1.Height; let := ''; str (Ncol,s); let := let + s +' x '; str (Nren,s); let := let + s; Resol.Text := let; end; end; procedure TForm1.Button2Click(Sender: TObject); var c, r, g, b, x : integer; i, j : integer; begin if imagenAbierta then begin //pasar a grises screen.cursor := crHourGlass; for i := 0 to Ncol - 1 do for j := 0 to Nren -1 do begin c := Image1.Canvas.Pixels[i,j]; r := c and $ff; g := (c and $ff00) shr 8; b := (c and $ff0000) shr 16; x := (r+g+b) div 3; c := $02000000 or x; //modo de paleta rojo c := c or (x shl 8); //verde c := c or (x shl 16); //azul Image1.Canvas.Pixels[i,j] := c; end; screen.cursor := crArrow; end; end; procedure TForm1.FormCreate(Sender: TObject); begin BM := TBitMap.Create; ImagenAbierta := false; Button2.Enabled := false; end; procedure TForm1.Button3Click(Sender: TObject); begin close; end; Si requieres mas datos comunicate conmigo. Espero te sirva |