Png au dessus d'une png avec alphascanline (scanline)
cs_AgentAmine
Messages postés28Date d'inscriptionmercredi 24 juin 2009StatutMembreDernière intervention11 avril 2012
-
27 août 2011 à 02:01
cs_AgentAmine
Messages postés28Date d'inscriptionmercredi 24 juin 2009StatutMembreDernière intervention11 avril 2012
-
27 août 2011 à 18:30
Salut,
J'ai cree une procedure pour dessiner une image PNG sur une autre, mais le resultat est mauvais :
C'est la 1ere image "Png" :
C'est la 2eme image "OverPng" :
c'est le résultat souhaité : (avec photoshop)
et c'est la mauvaise image : (avec mon code)
Ma Procedure :
function CombineAlphas(Source, Overlay: Byte): Byte;
begin
Result := Source + (255 - Source) * Overlay div 255;
end;
procedure DrawPng(var Png:TPngImage; OverPng:TPngImage; X,Y,W,H:Integer);
var P1,P2 : PByteArray;
I,J : Integer;
begin
for J := 0 to Png.Height-1 do
begin
P1 := Png.AlphaScanline[J];
P2 := OverPng.AlphaScanline[J-Y];
for I := 0 to Png.Width-1 do
Begin
if (I >= X) and (I < OverPng.Width+X) and (J >= Y) and (J < OverPng.Height+Y)
then P1[I] := CombineAlphas(P1[I],P2[I-X]);
End;
end;
Png.Canvas.Draw(X,Y,OverPng);
end;