Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   problema con edicion de imagenes (https://www.clubdelphi.com/foros/showthread.php?t=30638)

7pilas 12-04-2006 07:34:00

problema con edicion de imagenes
 
un saludo, me gustaria saver si alguien me puede ayudar a crear un filtro para hacer que un tipo tabulador el cual controle la intensidad de brillo en determinada fotografia, por esto me refiero a por ejemplo si la foto en las orillas esta muy oscura hacerla mas clara etc etc,espero me puedan ayudar nos vemos

seoane 12-04-2006 11:09:07

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

7pilas 14-04-2006 03:52:12

otra vez con lo de la edicion de imagenes
 
grasias por contestar, como me desian no especifique bien como cargaba la imagen..... es un jpg cargado desde un TImage , con respecto a lo del tablulador.... me referia a algo para controlar el nivel de brillo en la imagen... por ejemplo poder ponerle un 10% o un 50% etc .....para poder aplicarselo a una fotografia para aplicarle el filtro de brillo

seoane 15-04-2006 00:41:54

1 Archivos Adjunto(s)
Bien, el unico problema al ser una imagen jpeg y estar cargada en un TImage es que antes de poder utilizarla la tenemos que convertir a bmp y a partir de hay el proceso para cambiar el brillo es el mismo de antes.

Aqui te dejo un ejemplo haber si te sirve. En el explico como hacerlo de 2 formas diferentes, para usarlo solo tienes que cargar una imagen (JPEG o BMP) en el TImage de la izquierda antes de ejecutarlo y el hara el resto.


La franja horaria es GMT +2. Ahora son las 18:56:15.

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