Klar ist das möglich....
du musst dir nur die entsprechenden werte aus den dateien holen. Wenn invertieren so geht:
component := 255 - component (für alle drei kompoenenten eines pixels)
und dein graustufenwert, mit dem du es verrechnen willst, "wert" ist, kannst du es so blenden:
component := (component * wert + (255 - component) * (255-wert)) div 255;
Natürlichz für alle drei farbkomponenten jeden pixels.
EDIT:
Delphi-Quellcode:
procedure TForm2.BlendImages;
var
b1: TBitmap;
b2: TBitmap;
b3: TBitmap;
i: Integer;
k: Integer;
p1: Cardinal;
p2: Cardinal;
a: Byte;
r: Byte;
g: Byte;
b: Byte;
begin
if not (Image1.Picture.Bitmap.Empty
or Image2.Picture.Bitmap.Empty)
then
begin
b1 := Image1.Picture.Bitmap;
b2 := Image2.Picture.Bitmap;
b3 := TBitmap.Create;
b3.SetSize(Image1.Picture.Width,Image1.Picture.Width);
for i := 0
to Min(b1.Width, b2.Width) - 1
do
for k := 0
to Min(b1.Height, b2.Height) - 1
do
begin
p1 := b1.Canvas.Pixels[i, k];
p2 := b2.Canvas.Pixels[i, k];
a := GetRValue(p2);
r := GetRValue(p1);
r := (r * (255 - a) + (255 - r) * a)
div 255;
g := GetGValue(p1);
g := (g * (255 - a) + (255 - g) * a)
div 255;
b := GetBValue(p1);
b := (b * (255 - a) + (255 - b) * a)
div 255;
b3.Canvas.Pixels[i, k] :=
RGB(r, g, b);
end;
Image1.Picture.Bitmap.Assign(b3);
b3.Free;
end;
end;
Bringt exzellente Ergebnisse. Das ganze zu abstrahieren und von Canvas.Pixels auf Scanline umzusteigen, sollte auch kein problem sein.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1