Fade em Imagem
Alguém saberia como fazer um fade no componente TImage ??
Tipo eu preciso alternar entre duas imagens, alguém tem uma idéia?
Tipo eu preciso alternar entre duas imagens, alguém tem uma idéia?
Okama
Curtidas 0
Mais Respostas
Nildo
13/08/2003
Vou te dar a ideia de como fazer:
Tipo assim:
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!
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
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
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.
O objetivo é alternar entre várias imagens, vou fazer alguns testes com as idéias que me passou.
Um abraço.
GOSTEI 0
Cebikyn
13/08/2003
Existe uma forma de alternar imagens usando AlphaBlend da API do Windows:
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.
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
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.
Pensei que AlphaBlend fosse somente para formulários. Agradeço mesmo assim.
GOSTEI 0
Nildo
13/08/2003
AlphaBlend soh funciona com Windows NT
GOSTEI 0
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):
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]
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
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
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
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