Erstellen eines glänzenden Grafik- / Glanzeffekts

8

Ich möchte programmgesteuert einen Glanzeffekt auf ein Bild erstellen, ähnlich wie auf dem Apple-inspirierten Design, das das Web übernommen hat, als es auf 2.0 Beta aktualisiert wurde.

Im Wesentlichen das:

Beispiel-Icons http://nhc.hcmuns.googlepages.com/web2_icons.jpg

Nun sehe ich zwei Ansätze: Ich erstelle ein Bild mit einem Alpha-Kanal mit dem Glanzeffekt und kombiniere dann einfach die Eingabe und das Glanz-Alpha-Symbol, um dies zu erzeugen.

Der zweite Ansatz: Erstellen Sie das Alpha Gloss Image im Code und fügen Sie es dann mit der Eingabegraphik zusammen.

Ich würde die zweite Lösung bevorzugen, aber ich bin nicht viel von einer graphischen Person und ich weiß nicht, wie der Algorithmus dazu dient, solche Effekte zu erzeugen. Kann mir jemand ein paar Hinweise geben * für das, was ich hier eigentlich suche? Gibt es einen "gloss algorhitm", der einen Namen hat? oder schon eine .net Implementierung schon?

* Nein, nicht diese Art von Zeigern.

    
Michael Stum 20.09.2008, 23:22
quelle

3 Antworten

8

Ich kann diesen Effekt grafisch erklären.

  1. Erstellen Sie ein Bild um 3 * die Größe des Symbols.

  2. In diesem Bild erstellen Sie einen Kreis, wo (die Höhe des Symbols) & lt; Radius & lt; 2 * (die Höhe des Symbols).

  3. Füllen Sie den Kreis mit einer Alpha-Mischung / Transparenz (zu Weiß) von zB 10%.

  4. Schneidet das Kreisbild in ein neues Bild von gleicher Größe wie Ihre Icons, wobei der Mittelpunkt des Kreises außerhalb des Ansichtsbereichs zentriert ist, aber um 1/2 der Höhe des kleineren Bildes nach oben.

Wenn Sie dieses Bild dann dem ursprünglichen Symbol überlagern, sollte der Effekt ungefähr wie die obigen Symbole aussehen. Es sollte möglich sein mit imagemagick, wenn Sie daran interessiert sind, oder Sie können für eine der Grafik-APIs je nachdem, welche Sprache Sie verwenden möchten. Von den obigen Schritten sollte es einfach sein, programmatisch zu tun.

    
devinmoore 20.09.2008, 23:34
quelle
17

Danke, Devin! Hier ist mein C # -Code für die Umsetzung Ihres Vorschlags. Es funktioniert ganz gut. Verwandeln Sie dies in einen Community-eigenen Wiki-Beitrag. Wenn jemand gerne etwas Code hinzufügen möchte, können Sie diesen gerne bearbeiten.

(Beispiel verwendet andere Werte für Alpha und Belichtung als der unten stehende Code)

%Vor%

(Nach Johns Vorschlag geändert. Ich kann die Bitmap jedoch nicht löschen, dies muss vom Aufrufer der Funktion erledigt werden)

    
Michael Stum 19.06.2015 19:32
quelle
3

Reaktion auf den C # -Code ... Alles in allem gute Arbeit, um die Bildgebung in Gang zu bringen. Ich musste in der Vergangenheit mit einigen meiner Apps ähnliche Dinge tun.

Ein Ratschlag: Alle Grafikobjekte in .NET basieren auf Windows GDI + -Primitiven. Das bedeutet, dass diese Objekte korrekt entsorgt werden müssen, um ihre nicht speicherbaren Ressourcen zu bereinigen, ähnlich wie Dateihandles oder Datenbankverbindungen. Sie sollten den Code ein wenig optimieren, um dies korrekt zu unterstützen.

Alle GDI + -Objekte implementieren die IDisposable-Schnittstelle und machen sie mit der using-Anweisung funktionsfähig. Überlegen Sie, Ihren Code ähnlich wie folgt neu zu schreiben:

%Vor%

(Bedenken Sie, dass ich im Gegensatz zu den meisten meiner Beispiele keine Gelegenheit hatte, dies zu kompilieren und zu testen ... Es ist eher als Beispiel für die Strukturierung des Codes gedacht, um sicherzustellen, dass es keine Ressourcenlecks gibt, nicht als ein fertiges Produkt.Es gibt wahrscheinlich bessere Möglichkeiten, dies zu abstrahieren / zu strukturieren.Sie sollten dies in Betracht ziehen - werfen Sie dies in eine DLL der Grafikbibliothek, die Sie in jedem Projekt, das diese Fähigkeiten in der Zukunft benötigt, referenzieren können!)

    
John Rudy 21.09.2008 10:17
quelle

Tags und Links