AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Alphablending gegen transparenten Hintergrund
Thema durchsuchen
Ansicht
Themen-Optionen

Alphablending gegen transparenten Hintergrund

Ein Thema von Namenloser · begonnen am 16. Mai 2010 · letzter Beitrag vom 17. Mai 2010
Antwort Antwort
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#1

Alphablending gegen transparenten Hintergrund

  Alt 16. Mai 2010, 22:51
Hallo,

ich möchte gerne auf ein leeres, transparentes Bitmap eine alphatransparente Farbe zeichnen. Der übliche Ansatz, den man auch überall im Internet findet ist folgender:
Ergebnis = Hintergrund * (1.0 - Alpha) + Vordergrund * Alpha; Leider versagt dieser Ansatz jedoch, wenn der Hintergrund nicht opak ist.

Beispiel:
(Der Einfachkeit halber werde ich hier mal von einem Graustufenbild mit Alphakanal ausgehen)
Der Hintergrund ist "leer": [Farbe: 0.0; Alpha: 0.0].
Darauf wird jetzt 50%iges Weiß gezeichnet: [Farbe: 1.0; Alpha: 0.5].

Das erwartete/erwünschte Ergebnis wäre also ebenfalls 50%iges Weiß [Farbe: 1.0; Alpha: 0.5].

Nimmt man aber nun die obige Formel, kommt etwas anderes heraus:
Delphi-Quellcode:
Farbe = 0.0 * (1.0 - 0.5) + 1.0 * 0.5 = 0.5
Alpha = 0.0 * (1.0 - 0.5) + 1.0 * 0.5 = 0.5
Das Ergebnis ist also [Farbe: 0.5; Alpha: 0.5].

Die Ursache ist offensichtlich, dass in der Rechnung der Alphawert des Hintergrundes nicht berücksichtigt wird. Leider stehe ich aber irgendwie auf dem Schlauch und komme auf keine Formel, die auch mit transparenten Hintergründen klarkommt.

Ich hoffe meine Erklärung war verständlich. Um es noch mal zu veranschaulichen: Ich möchte gerne so ein Verhalten wie bei den Layern in Photoshop und ähnlichen Bildbearbeitungsprogrammen.

Hat jemand eine Idee, wie man das erzielt?

Vielen Dank schonmal.
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Alphablending gegen transparenten Hintergrund

  Alt 16. Mai 2010, 23:07
Ah, na typisch, kaum erstellt man das Topic, findet man doch noch was - ich glaube, ich habe jetzt gefunden was ich suche.
Zitat:
Code:
X.a = M.a + N.a * (1 - M.a)
X.r = (M.r * M.a + N.r * N.a * (1 - M.a)) / X.a
Mal schauen, ob das funktioniert.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Alphablending gegen transparenten Hintergrund

  Alt 17. Mai 2010, 08:09
wenn man wüsste womit du arbeitest hätte man dir auch einen Tipp geben können. Wenn du mit "1 - Alpha" arbeitest deutet es darauf hinn das 1 bei dir das maximum ist. Wenn du jedoch mit Bitmaps arbeitest so steckt hinter dem Alphawert ein Wert bis 255.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#4

Re: Alphablending gegen transparenten Hintergrund

  Alt 17. Mai 2010, 13:52
Ich habe hier der Einfachkeit halber einen Wertebereich von 0-1 genommen. Damit spart man sich das Dividieren und Multiplizieren mit 255 an diversen Stellen.
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Alphablending gegen transparenten Hintergrund

  Alt 17. Mai 2010, 14:27
0..1 ist auch der Standard bei Farben, die 0..255 sind ein Spezialfall der 24Bit RGB (bzw. genereller aller Formate die in Bytes denken). Allgemeine Formeln drückt man immer in 0..1 aus.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  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 05:55 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