Więc to, co mam na efekt stylu winieta na Androida (obraz jest mapa bitowa):Vignette w Androidzie
public void vignette() {
float radius = (float) (image.getWidth()/1.5);
RadialGradient gradient = new RadialGradient(image.getWidth()/2, image.getHeight()/2, radius, Color.TRANSPARENT, Color.BLACK, Shader.TileMode.CLAMP);
Canvas canvas = new Canvas(image);
canvas.drawARGB(1, 0, 0, 0);
final Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setColor(Color.BLACK);
paint.setShader(gradient);
final Rect rect = new Rect(0, 0, image.getWidth(), image.getHeight());
final RectF rectf = new RectF(rect);
canvas.drawRect(rectf, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(image, rect, rect, paint);
}
ten „dzieła”, ale istnieje kilka problemów. Po pierwsze, to nie jest winieta, to tylko gradient, dzięki czemu można zobaczyć fragmenty czerni przechodzące prawie całą drogę do centrum, zamiast wyrywać się bliżej krawędzi.
Zastosowany radialGradient pozwala również na ustawienie promienia okręgu zamiast elipsy. Elipsa byłaby w stanie skuteczniej dopasować wymiary obrazu innego niż kwadratowy.
Jakość gradientu również nie jest doskonała.
Próbuję zreplikować metodę winietowania z ImageMagick (mam na myśli konkretnie wersję php). Mam ten kod w PHP, który produkuje styl obrazu, który chcę:
$im = new IMagick('city.png');
$im->vignetteImage($width/1.5, 350, 20, 20);
Próbowałem budowę ImageMagick z NDK ale bezskutecznie odpowiednio łącząc różne bibliotek graficznych (mam tylko udało się stworzyć z obsługą gif, ale bez png, jpeg lub tiff).
Dołączyłem także obraz porównujący dwie metody pokazane powyżej. Obraz po lewej został wygenerowany za pomocą ImageMagick przez php, a obraz po prawej został wygenerowany za pomocą metody pokazanej powyżej dla Androida.
Masz jakieś rozwiązanie ... Jeśli tak, to możesz mi je przekazać .....? ....... Dziękuję – Kalpesh
Do tej pory odpowiedź geeknizera jest najlepsza, jaką mam. Jeszcze tego nie wypróbowałem ... do tego dziś rano. – gregghz
Trochę za późno, ale czy masz jakieś rozwiązanie tego problemu? Czy możesz podać kod? Uratowałbyś moje życie, jeśli tak! @ greggory.hz – Sebastian