Ver Mensaje Individual
  #4  
Antiguo 28-11-2011
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is online now
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.440
Reputación: 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
Te adjunto una pequeña prueba que cambia los componentes de color de una imagen. Es muy simple. Captura cada uno de los pixels de una imagen y modifica en un porcentaje cada unos de los componentes (red, green, blue).

Puedes utilizar las funciones que te comenté para realizar otras transformaciones, de forma similar. Una vez que lo tengas se pueden realizar optimizaciones, por ejemplo usando ScanLine.

El código de modificación sería algo así:

Código Delphi [-]
procedure TForm6.TrackBar1Change(Sender: TObject);
var
  i,j:integer;
  col, nCol:TColor;
  bmp:TBitmap;
  rval, gval, bval:integer;
begin

  // Creamos un BMP para utilizarlo en las transformaciones
  bmp := TBitmap.Create;
  try
    // Asignamos el contenido
    bmp.Assign(Image1.Picture.Graphic);
    // Asignar al BMP a la segunda imagen (hará de previsualización)
    Image2.Picture.Assign(bmp);

    // Recorridos a lo ancho y alto
    for i := 0 to ((bmp.Canvas.ClipRect.Right - bmp.Canvas.ClipRect.Left) - 1) do begin
      for j := 0 to ((bmp.Canvas.ClipRect.Bottom - bmp.Canvas.ClipRect.Top) - 1) do begin

        // Color actual
        col := bmp.Canvas.Pixels[i, j];
        // Extraemos los componentes de cada pixel
        rval := GetRValue(Col);
        gval := GetGValue(col);
        bval := GetBValue(Col);

        // Aplicamos el cambio segun cada trackbar
        rval := round(rval * (TrackBar1.Position / 100));
        gval := round(gval * (TrackBar2.Position / 100));
        bval := round(bval * (TrackBar3.Position / 100));

        // Color con los cambios
        nCol := RGB (rval, gval, bval);
        // Asignamos el nuevo colo
        bmp.Canvas.Pixels[i, j] := nCol;

      end;
    end;
  finally

    // Asignamos el resultado
    Image2.Picture.Graphic.Assign(bmp);
    // Y liberamos
    FreeAndNil(bmp)
  end;
end;
Archivos Adjuntos
Tipo de Archivo: zip Test_Change_Color.zip (3,4 KB, 43 visitas)
__________________
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