AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Bitmaps: Freistellungstool / Hintergrund markieren
Thema durchsuchen
Ansicht
Themen-Optionen

Bitmaps: Freistellungstool / Hintergrund markieren

Ein Thema von alzaimar · begonnen am 26. Okt 2006 · letzter Beitrag vom 31. Okt 2006
 
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Bitmaps: Freistellungstool / Hintergrund markieren

  Alt 29. Okt 2006, 03:39
Zitat von alzaimar:
Erste Frage: Kennt Jemand die graphic32-Library und kann mir aus dem Stehgreif die Klasse nennen, die das kann?
Soweit ich die G32 kenne, kann sie das nicht von Hause aus so fix und fertig. Jedoch ist das ganze sehr simpel, solange du es wirklich ausschließlich und nur an einer Farbe (mit Toleranz) festmachen kannst, was Hintergrund ist und was nicht.

Eine Farbe besteht ja auf dem PC idR aus den drei (Licht-)Grundfarben Rot, Grün und Blau, die üblicherweise mit einem Wert von 0-255 für die Intensität der jeweiligen Farbkomponente angegeben wird. Nun kann man diese drei Werte auch als Vektor betrachten, und von einem Vektor kann ich die Länge berechnen! Die "Länge" des Farbvektors wäre demnach sqrt(r²+g²+b²). Diese rechnest du für deine Referenzfarbe R aus, und Pixelweise für jeden Bildpunkt des zu bearbeitenden Bildes (B). Wenn nun abs(|R|-|B|) <= Threshold, dann ist die Farbe des Bildpunktes nah genug an der Referenz, um als Hintergrund gelten zu können.

("|x|" ist die Kurzschreibweise für "Länge von x" bzw. "Betrag von x" (Der Betrag ist nämlich defakto nicht anderes als die Länge). Manche kennen auch eine leicht andere Schreibweise: "||x||")


\\Edith: Für den Schwellenwert wird es allerdings schwierig bis unmöglich eine Automatik zu bauen. Den sollte man daher vom User wählbar lassen. (O.g. dürfte in etwa auch das Vorgehen sein, welches diverse Bitmapprogramme für das Tool "Magic Wand" (Maskieren nach Farbähnlichkeit) zugrunde liegen haben. Nur dass sie noch drauf achten, dass die Maskierung im Rahmen der Toleranz vom Startpunkt aus zusammenhängend ist, was aber für diesen Fall hier eher ungeeignet wäre.)

Noch eine Idee: Du könntest ja sogar die Differenz der Fabrvektorlängen als Basis für die Berechnung eines Alphakanals her nehmen. Je nach dem wie das Bild dann aufgebaut ist (Schärfe z.B.) würde man damit einigermaßen "weich" freistellen können. Aber das nur so als Spielerei am Rande


Gruss,
Fabian
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
 


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 07:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz