Ausgegrautes Image erstellen

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Ausgegrautes Image erstellen

Beitrag von Josh »

Hat jemand einen Tipp, wie ich aus einem farbigen Image ein ausgegrautes Image erstellen kann. So in der Art, wie die Icons in der Toolbar, die grau dargestellt werden, wenn sie deaktiviert sind.

Ich meine natürlich nicht ein Grafikbearbeitungsprogramm, sondern ein Erstellen des Image zur Laufzeit. Da ich das ganze nur für Windows brauche, wäre eine API natürlich auch möglich. Das ganze soll auch für Images mit Alphakanal möglich sein.

Danke
Josh
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Ausgegrautes Image erstellen

Beitrag von STARGÅTE »

Ich verwende dafür mein DrawingFilter:

Code: Alles auswählen

Procedure DrawingFilter_Desaturate(X.i, Y.i, SourceColor.i, DestinationColor.i)
	
	Protected Gray.i = (DestinationColor>>16&$FF + DestinationColor>>8&$FF + DestinationColor&$FF) / 3
	Protected Factor.f = Alpha(SourceColor)/255
	Protected Color.i = RGBA(Red(DestinationColor)*(1-Factor)+Gray*Factor, Green(DestinationColor)*(1-Factor)+Gray*Factor, Blue(DestinationColor)*(1-Factor)+Gray*Factor, Alpha(DestinationColor))
	ProcedureReturn Color
	
EndProcedure
Den kannst du als CustomFilterCallback() verwenden.
Dabei das Bild einfach normal zeichnen, danach den Callback erstellen und dann mit einer Maske deiner Wahl (zB Box) den Bereich auswählen der ausgegraut werden soll. Der Alpha-Wert der Maske ist dabei ein Wert für die "Ausgrauung"
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Derren
Beiträge: 558
Registriert: 23.07.2011 02:08

Re: Ausgegrautes Image erstellen

Beitrag von Derren »

Wenn ich das richtig sehe bildest du den Mittelwert aus den RGB werten.
Das ergibt aber ein falsches Graustufen bild. Je nachdem ob es wirklich nur um Icons geht oder um Photographien kann das einen Unterschied machen.

Grün wird vom menschlichen Auge heller wahrgenommen als rot oder blau (00FF00 ist heller als FF0000). Mit Mittelwertsberechnung ist der Graustufenpixel aber gleich hell, egal ob 00FF00 oder FF0000.

Code: Alles auswählen

greyscale = (red*0.299 + green*0.587 + blue*0.114)
;The decimal values represent the intensity of the colors in the eye
(Quelle: http://www.codeproject.com/Articles/198 ... GDI-Part-1)
Signatur und so
Antworten