Einzelnen Beitrag anzeigen

Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Farben anhand einer Maske invertieren.

  Alt 27. Okt 2006, 21:52
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
  Mit Zitat antworten Zitat