Ver Mensaje Individual
  #2  
Antiguo 11-08-2011
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Reputación: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Hola y bienvenido Roll462011.

Me alegra que ese tutorial acerca de las transparencias te haya perecido interesante.

Para evitar el parpadeo debes poner
Código Delphi [-]
Form1.Doublebuffered:= true
.

Yo utilizaría un TBitmap temporal para guardar la imagen original de esta manera:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, ExtCtrls, jpeg;

type
  TForm1 = class(TForm)
    Image2: TImage;
    Image3: TImage;
    TrackBar1: TTrackBar;
    procedure FormCreate(Sender: TObject);
    procedure TrackBar1Change(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    TmpBitmap: TBitmap;
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
procedure DrawSemiTransparent(Canvas: TCanvas; bmp: TBitmap; Percent: integer);
var
   bf: BLENDFUNCTION;
begin
   bf.BlendOp:= AC_SRC_OVER;
   bf.BlendFlags:= 0;
   bf.SourceConstantAlpha:= MulDiv($FF, Percent, 100);
   bf.AlphaFormat:= 0;
   Windows.AlphaBlend(Canvas.Handle, 0, 0, bmp.Width, bmp.Height, bmp.Canvas.Handle, 0, 0, bmp.Width, bmp.Height, bf);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
  Doublebuffered:= true;
  TmpBitmap:= TBitmap.Create;
  TmpBitmap.Assign(Image3.Picture.Graphic);
  Image3.Picture.Bitmap.Assign(TmpBitmap);
  TmpBitmap.Assign(Image2.Picture.Graphic);
  TmpBitmap.PixelFormat := pf32bit;
end;

procedure TForm1.TrackBar1Change(Sender: TObject);
begin
  Image2.Picture.Bitmap.Assign(TmpBitmap);
  DrawSemiTransparent(Image2.Canvas, Image3.Picture.Bitmap, TrackBar1.Position);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  TmpBitmap.Destroy;
end;

end.


Saludos.
Responder Con Cita