Hier mal ein Beispiel, damit überhaupt klar ist, was ich meine
.
Bei meiner foo-Prozedur musste ich allerdings noch eine Hilfsprozedur hinzufügen:
Delphi-Quellcode:
procedure foo(bSource, bDest: TBitmap); //Der Schatten ist die Quelle, die Textur das Ziel
function RoundByte(Value: Single): Byte;
var x: Integer;
begin
x:=Round(Value);
if x>255 then
x:=255
else
if x<0 then
x:=0;
Result:=x;
end;
var pSource, pDest: PRGBQuad;
x, y: Integer;
begin
[...]
pDest^.rgbRed :=RoundByte( pDest^.rgbRed-(255-pSource^.rgbRed));
pDest^.rgbBlue :=RoundByte( pDest^.rgbBlue-(255-pSource^.rgbBlue));
pDest^.rgbGreen :=RoundByte( pDest^.rgbGreen-(255-pSource^.rgbGreen));
// Wenn der Pixel in der Schatten-Bitmap weiß ist, wird an bSource nichts verändert, sonst eben dunkler
Inc(pDest);
Inc(pSource)
end
end
end;