Fade em Imagem

Delphi

13/08/2003

Alguém saberia como fazer um fade no componente TImage ??

Tipo eu preciso alternar entre duas imagens, alguém tem uma idéia?


Okama

Okama

Curtidas 0

Mais Respostas

Nildo

Nildo

13/08/2003

Vou te dar a ideia de como fazer:

Tipo assim:

var
   nAux: TPoint;
begin
   // -> Issu aki vai dentro de algum FOR
      nAux.x := Random(image1.width);
      nAux.y := Random(image1.Height);
      image1.canvas.pixels[nAux.x,nAux.y] := image2.canvas.pixels[nAux.x,nAux.y]
end;


Entendeu? Faz algo do tipo, soh que em um FOR inteligente.
Eh q to meio sem tempo senao faria pra vc...

Eh um FADE bem feio.. mas da um efeito legal!


GOSTEI 0
Nildo

Nildo

13/08/2003

Tente esse:

procedure TForm1.Button1Click(Sender: TObject);

 procedure FadeOut(const BMP:TImage; Pause:integer);
  var
   BytesPorScan  : integer;
   w,h           : integer;
   p             : pByteArray;
   counter       : integer;

  begin
     {This only works with 24 or 32 bits bitmaps}
     If Not (BMP.Picture.Bitmap.PixelFormat
             in [pf24Bit, pf32Bit])
      then raise exception.create
         (´Error, bitmap format not supported.´);

     try
      BytesPorScan:=
       Abs(Integer(BMP.Picture.Bitmap.ScanLine[1])-
           Integer(BMP.Picture.Bitmap.ScanLine[0]));
     except
       raise exception.create(´Error´);
     end;

     {Decrease the RGB for each single pixel}
     for counter:=1 to 256 do
     begin
       for h:=0 to BMP.Picture.Bitmap.Height-1 do
       begin
         P:=BMP.Picture.Bitmap.ScanLine[h];
         for w:=0 to BytesPorScan-1 do
           if P^[w] >0 then P^[w]:=P^[w]-1;
       end;
       Sleep(Pause);
     BMP.Refresh;
     end;
   end; {procedure FadeOut}
 begin 
   FadeOut(Image1,5);
 end;



GOSTEI 0
Okama

Okama

13/08/2003

Valeu Nildo, o primeiro não funcionou e segundo sim.

O objetivo é alternar entre várias imagens, vou fazer alguns testes com as idéias que me passou.

Um abraço.


GOSTEI 0
Cebikyn

Cebikyn

13/08/2003

Existe uma forma de alternar imagens usando AlphaBlend da API do Windows:

var
  res : TBitmap;
  bf : _BLENDFUNCTION;
begin
  res := TBitmap.create;
  try
    res.width := i1.picture.width;
    res.height := i1.picture.height;
    res.assign(i1.picture.bitmap);


    bf.BlendOp := AC_SRC_OVER;
    bf.BlendFlags := 0;
    bf.SourceConstantAlpha := XXX;
    bf.AlphaFormat := 0;
    AlphaBlend(res.canvas.handle, 0,0,res.width,res.height,i2.picture.bitmap.Canvas.handle,0,0,res.width,res.height,bf);
    i3.Picture.assign(res);
  finally
    res.free;
  end;


Em que i1, i2 e i3 são TImages, i1 e i2 contem as imagens, i3 contem i2 sobre i1 (semi-trasparente). Você pode trabalhar também só com o TBitmap.

Para alternar as imagens, você deverá variar o valor de XXX de 0 (i1 sem modificação) até 255 (i2 é visto por completo) usando um TTimer ou um for to do.


GOSTEI 0
Okama

Okama

13/08/2003

Deu erro na linha do AlphaBlend. É uma função? Preciso declarar alguma Unit?

Pensei que AlphaBlend fosse somente para formulários. Agradeço mesmo assim.


GOSTEI 0
Nildo

Nildo

13/08/2003

AlphaBlend soh funciona com Windows NT


GOSTEI 0
Cebikyn

Cebikyn

13/08/2003

AlphaBlend é uma função da API do Windows (qualquer versão). E serve para manipular imagens, conforme descrito no [i:d68a4a8d9c]post[/i:d68a4a8d9c] anterior. E sim existe uma propriedade homônima para formulários (TForm.AlphaBlend: boolean)

Extraído da [i:d68a4a8d9c]Unit[/i:d68a4a8d9c] [b:d68a4a8d9c]Windows.pas[/b:d68a4a8d9c] (Delphi 6 Enterprise):
{$EXTERNALSYM AlphaBlend}
function AlphaBlend(DC: HDC; p2, p3, p4, p5: Integer; DC6: HDC; p7, p8, p9, p10: Integer; p11: TBlendFunction): BOOL; stdcall;


Parece que a partir da versão 6 do Delphi, ele confunde a propriedade com a função, a pesar da referida função estar declarada na unit windows.pas que vem com o D6. Não sei porque...[img:d68a4a8d9c]http://www.guarany70ge.hpg.ig.com.br/ads/crash.gif[/img:d68a4a8d9c]


GOSTEI 0
Allen74

Allen74

13/08/2003

AlphaBlend é uma função da API do Windows (qualquer versão). E serve para manipular imagens, conforme descrito no post anterior. E sim existe uma propriedade homônima para formulários (TForm.AlphaBlend: boolean)


Por incrível que possa parecer, eu fiz uma pesquisa e o AlphaBlend, apesar de fazer parte da API do Windows, não é suportado pelo Windows 95 e nem pelo Windows Me.


GOSTEI 0
Luiz_aquino

Luiz_aquino

13/08/2003

não teria como mandar um exemplo de fazer o fade, tentei aki mas não tive nenhum resultado

mas eu gostaria de saber como faço para um botão quando passar com o mouse vai ficando mais forte, ele está meio transparente sem cor, aí vai aarecenendo a cor e ao sair faço o contrario


GOSTEI 0
POSTAR