Ver Mensaje Individual
  #2  
Antiguo 12-04-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Reputación: 24
seoane Va por buen camino
No aclaras si la fotografia es un bmp, un jpeg, si esta en un archivo o cargada en un TImage. Asi que voy a suponer que esta en un archivo bmp. Ademas no entiendo muy bien eso del marco, el codigo que te pongo a continuacion aumenta el brillo de toda la imagen, no de solo una parte.

Código Delphi [-]
type
  Triple = array[1..3]of Byte;

// Realiza la operacion (b * x) / 128
function Multiplicar(b: Byte; x: Integer): byte;
begin
  x:= (x * b) shr 7;
  if x > 255 then Result:= 255
    else Result:= x;
end;

procedure Filtro(Origen, Destino: string; Brillo: Integer);
var
  Bitmap: Tbitmap;
  P: ^Triple;
  i,j: Integer;
begin
  Bitmap:= TBitmap.Create;
  try
    try
      Bitmap.LoadFromFile(Origen);
      Bitmap.PixelFormat:= pf24bit; // 3 bytes por pixel (Azul, Verde y Rojo)
      for j:= 0 to Bitmap.Height - 1 do
      begin
        P:= Bitmap.ScanLine[j];
        for i:= 0 to Bitmap.Width - 1 do
        begin
          P^[1]:= Multiplicar(P^[1],Brillo);
          P^[2]:= Multiplicar(P^[2],Brillo);
          P^[3]:= Multiplicar(P^[3],Brillo);
          inc(P);
        end;
      end;
      Bitmap.SaveToFile(Destino);
    except
      ShowMessage('No puedo realizar la tarea');
    end;
  finally
    Bitmap.Free;
  end;
end;

Para usar la funcion hay que pasarle como parametros, el archivo de origen, el de destino y el brillo. El brillo tiene la siguientes equivalencias: 0=0%, 128=100%, 256=200%, etc ...

Por ejemplo, asi aumentariamos el brillo en un 50%
Código Delphi [-]
Filtro('d:\1.bmp','d:\2.bmp',192);

Espero que te sirva

Última edición por seoane fecha: 12-04-2006 a las 11:13:44.
Responder Con Cita