Vignettierung in Android

8

Das ist also, was ich für einen Vignette-Style-Effekt in Android habe (Bild ist eine Bitmap):

%Vor%

Das funktioniert, aber es gibt ein paar Probleme. Zuallererst ist dies nicht wirklich eine Vignette, es ist nur ein Gefälle, so dass man Teile des Schwarzen fast bis zum Zentrum sehen kann, anstatt näher an den Rändern auszufedern.

Der verwendete RadialGradient erlaubt auch nur die Einstellung des Radius eines Kreises statt einer Ellipse. Eine Ellipse wäre in der Lage, die Abmessungen eines nichtquadratischen Bildes effektiver zu bestimmen als ein Kreis.

Die Qualität des Gradienten ist auch nicht hervorragend.

Ich versuche, die vignetteImage-Methode von ImageMagick zu replizieren (ich beziehe mich speziell auf die php-Version). Ich habe diesen Code in PHP, der den gewünschten Bildstil erzeugt:

%Vor%

Ich habe versucht, ImageMagick mit dem NDK zu erstellen, aber es ist nicht gelungen, die verschiedenen Bildbibliotheken korrekt zu verbinden (ich habe nur mit gif-Unterstützung erfolgreich gebaut, aber kein png, jpeg oder tiff).

Ich habe auch ein Bild beigefügt, das die beiden oben gezeigten Methoden vergleicht. Das Bild auf der linken Seite wurde mit ImageMagick über PHP erstellt und das Bild auf der rechten Seite wurde mit der oben für Android gezeigten Methode erstellt.

    
gregghz 18.05.2012, 19:47
quelle

2 Antworten

4

Wenn Sie sich das Bild links genauer ansehen, verwendet tf einen exponentiellen Anstieg von Alpha (Transparenz) gegenüber Bild auf der rechten Seite, was sehr linear ist.

Offensichtlich Shader.TitleMode.CLAMP ist eine lineare Funktion. Was Sie stattdessen tun sollten, ist RadialGradient (float x, schweben y, float radius, int [] Farben, float [] Positionen, Shader.TileMode Kachel) definieren 10 oder mehr Punkte auf dem Bild mit exponentiell abnehmenden Farbwerten (schwarz bis transparent).

Alternativ können Sie auch die Galerie 3d-Quelle für die ICS-Galerie aufrufen Ссылка

    
Taranfx 22.05.2012, 06:59
quelle
1

Ich weiß, das ist eine alte Diskussion, aber es kann jemandem helfen. Sie können AccelerateInterpolator verwenden, um die von Taranfx erwähnten Punkte zu generieren und es wird großartig abschließen.

    
Radu Nastasa 11.08.2013 11:09
quelle

Tags und Links