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
Ausgegrautes Image erstellen
Re: Ausgegrautes Image erstellen
Ich verwende dafür mein DrawingFilter:
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"
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
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
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: Ausgegrautes Image erstellen
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.
(Quelle: http://www.codeproject.com/Articles/198 ... GDI-Part-1)
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
Signatur und so