AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Farben anhand einer Maske invertieren.
Thema durchsuchen
Ansicht
Themen-Optionen

Farben anhand einer Maske invertieren.

Ein Thema von DevilsCamp · begonnen am 27. Okt 2006 · letzter Beitrag vom 27. Okt 2006
Antwort Antwort
DevilsCamp
(Gast)

n/a Beiträge
 
#1

Farben anhand einer Maske invertieren.

  Alt 27. Okt 2006, 21:24
Ich habe folgende Bilder:

Bild1:
http://www.myrasmussen.de/bilder/dpraxis/kreis.png

Bild2:
http://www.myrasmussen.de/bilder/dpr...intergrund.png


Nun möchte ich dieses in ein Bild1 so in Bild2 einbauen, so dass bei Bild2 die "überschriebenen" Pixel abhängig vom Weiß-Anteil (oder schwarz) der entsprechenden Pixel von Bild1 invertiert werden.

Also so:
http://www.myrasmussen.de/bilder/dpraxis/ergebnis.png


Ist so etwas überhaupt möglich und wenn ja wie?
  Mit Zitat antworten Zitat
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
DevilsCamp
(Gast)

n/a Beiträge
 
#3

Re: Farben anhand einer Maske invertieren.

  Alt 27. Okt 2006, 22:46
Also mit
Canvas.CopyMode = cmSrcInvert; habe ich den gewünschten Effekt erreicht. Allerdings scheint dies nur zu funktionieren, wenn der Hintergrund Unifarben ist.
Meine Absicht, dieses bei einem Hintergrund mit Farbverlauf zu verwenden bringt mir den Effekt, der im Anhang zu sehen ist.
Miniaturansicht angehängter Grafiken
bild11_781.png  
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz