Ich muss ein Makro schreiben, dass: Ich fülle A1 mit einer schwarzen Farbe. Dann, wenn ich das Makro benutze, sollte A2 etwas heller sein, A3 noch leichter ... usw., bis A20 weiß ist. Der "F5" -Zellenwert sollte den Grad des Gradientenexponenten steuern. Der aktuelle Code ändert die Farbe proportional. Wenn ich Werte in "F5" (z. B. von 1 bis 0,7) ändere, passiert, dass ALLE dieser 20 Zellen ("A1: A20") EQUAL dunkler werden. Und die letzte Zelle A20 ist nicht mehr weiß.
Allerdings muss meine Faustzelle "A1" schwarz und die letzte Zelle "A20" weiß sein egal was ... Und die Farbverteilung für die Zellen sollte sein EXPONENTIAL, dh der Dunkelheitsunterschied zwischen A1 und A2 sollte ZWEIMAL sein (wenn "F5" == 2) so groß wie der Dunkelheitsunterschied zwischen A3 und A2 usw. ...
%Vor% Ich kann nicht herausfinden, welche Funktion ich oben implementieren sollte, damit die
Farbänderung wäre exponentiell, wenn ich den Wert für die Variable contrast
in "F5" ändere?
// UND
Sie können nicht beide haben "die nächste Zelle ist doppelt so weiß" und "die erste Zelle ist schwarz und die letzte Zelle ist weiß". Was Sie suchen, ist eine sogenannte "Gammafunktion" - ein Grad der Skalierung von Zahlen von 0 bis 255, wobei die Geschwindigkeit, mit der sie heller werden, von einem Faktor abhängt (manchmal als Gamma bezeichnet).
In seiner Grundform können Sie etwas wie:
verwenden %Vor%Wenn Ihr Gamma nun 1 ist, wird die Skalierung linear sein. Wenn Gamma & gt; 1, wird die Intensität für die letzten paar Zellen schneller zunehmen. Wenn es weniger als 1 ist, ändert es sich schnell für die ersten paar Zellen.
Ich gehe davon aus, dass die cellNum
von 1 bis 20 geht und dass numCells
20 ist. Dieser Wert des Kontrastes im .TintAndShade
Ausdruck, den Sie verwenden, sollte Ihnen die Wirkung geben, die Sie sind Auf der Suche nach. gamma
muss keine Ganzzahl sein, aber wenn es & lt; 0 erhalten Sie Kontrast & gt; 1, und das wird dir seltsame Ergebnisse geben (ganz weiß, stelle ich mir vor).
Übrigens - benenne dein Makro3 in etwas Sinnvolleres um ( adjustContrast
) und rufe es mit dem Wert von F5 als Parameter auf:
und
%Vor%Da aus Ihrem Kommentar klar war, dass ich in meinem ursprünglichen Beitrag nicht explizit genug war, hier ist der vollständige Code und die Ergebnisse, die er mir gibt. Hinweis - Dies ist ein Code, um den Effekt der Änderung von Gamma auf der Anzeige zu demonstrieren, nicht den genauen Code, den Sie verwenden möchten (z. B. ich gehe über vier Spalten und habe vier verschiedene Gammawerte):
%Vor%Bevor ich den Code ausführe, sieht mein Bildschirm so aus (die Werte in den Zellen sind berechnete Kontrastwerte für das gegebene Gamma):
Nach dem Ausführen sieht es so aus:
Wie Sie sehen können, habe ich ein zusätzliches "Feature" hinzugefügt: Die Färbung der Schriftart wird geändert, um die Dinge sichtbar zu halten. Dies setzt natürlich voraus, dass die "Template-Zelle" (in meinem Fall A1
) einen guten Kontrast zwischen den Schrift- und Füllfarben hat.
Um es exponentiell arbeiten zu lassen, könnten Sie versuchen, die folgende Logik zu verwenden:
Der folgende Code ist im Vergleich zu Ihrem einen geringfügig geändert:
%Vor%Was wichtig ist - schauen Sie in diese Zeile:
%Vor% wo Sie tun können, was Sie wollen, z. Ändere: (1 + (c / allCellsCount))
in etwas zwischen 1 und 2, um den Weg der Logik zu verstehen. Im Allgemeinen können Sie das Tempo der Schattierungsänderung anpassen, indem Sie diese Zeile manipulieren, insbesondere mit diesem Teil des Codes: (c * (1 + (c / allCellsCount))