On Mon, 19 Sep 2016 20:00:54 +0200 (CEST) Michael Van Canneyt <mich...@freepascal.org> wrote:
> Maybe you can share your code, so we can improve the base class ? It's just a trivial change to the Draw function and IMO there is little gain implementing it like this for TFPCustomCanvas, but here you go: -add variables: NewColor, DstColor: TFPColor; alpha: double; -replace: colors [r,t] := image.colors[xx,t-y] with begin DstColor:=colors[r,t]; NewColor:=image.colors[xx,t-y]; alpha:=0; if NewColor.alpha>0 then alpha:=NewColor.alpha/65535; NewColor.red:=round((NewColor.red*alpha)+DstColor.red*(1-alpha)); NewColor.green:=round((NewColor.green*alpha)+DstColor.green*(1-alpha)); NewColor.blue:=round((NewColor.blue*alpha)+DstColor.blue*(1-alpha)); colors[r,t]:=NewColor; end; As you can see this is (SrcColor*ScrAlpha)+DstColor*(1-SrcAlpha) and since I blend RGBA on RGB images there is no need to care about destination alpha. FPCustomCanvas should IMHO allow many different blending equations (think Photoshop/Gimp blending of layers). How about something like: begin if assigned(BlendFunc) then begin DstColor:=colors[r,t]; SrcColor:=image.colors[xx,t-y]; colors[r,t]:=BlendFunc(SrcColor, DstColor); end else colors [r,t] := image.colors[xx,t-y]; end; hih R. _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal