2011-09-28 9 views
6

アンチエイリアスを使用して画像をより滑らかにします。アンチエイリアシングを使用すると、暗い枠線が画像の周りに描画されます。これは、Androidが色の黒を使用し、画像の黄色と混合するために発生します。 これは厄介な問題です!矩形を描き、アルファ値を127に設定すると、画像も静かに暗くなります。黒いAndroidを使用する代わりに、白を使用して透過性を描画する必要があります。一般的なAndroidの半透明のバグ

この問題を解決する方法はありますか?

半透過矩形をキャンバスに描画するためのソースコードの例。長方形も暗いですが、明るいはずです。私はバグを見つけたと思う http://code.google.com/p/svg-android/

Bitmap bmp = Bitmap.createBitmap(200, 200, Config.ARGB_8888); 
Canvas canvas = new Canvas(bmp); 
Paint rPaint = new Paint(); 
rPaint.setColor(Color.parseColor("#F7E836")); 
rPaint.setAlpha(127); 
rPaint.setStyle(Paint.Style.FILL); 
canvas.drawRect(0, 0, 100, 100, rPaint); 

画像は次のライブラリを使用してレンダリングされているSVGグラフィックです。問題はSurfaceViewです。背景は黒です。上記のコードを使用してImageViewに表示し、ImageViewの背後にあるUI要素の背景色が黒の場合、同じ半透明のバグが発生します。 SurfaceViewの背景色は常に黒です。これをsetBackgroundColorで白に変更すると、SurfaceViewは白くなりますが、OpenGLで描画された他のすべての画像よりも白い背景が描画されます。私はこれらを切り替えなければならないと思います。最初に背景色を描画し、OpenGLのものよりも描画する必要があります。

答えて

2

元のソースイメージへのリンクを掲載し、アンチエイリアスの方法(コード)を示します。

画像がアンチエイリアス処理されると、アルゴリズムはエッジを構成する色の間に色を挿入します。したがって、黄色の星画像では、背景が白であれば、黄色と白の間にあるエッジの周りにピクセルを追加しようとします(黄色の明るい色合い)。これがイメージを「滑らかにする」ものです。

しかし、画像にインデックス付きの色空間がある場合、明るい黄色の色合いは画像パレットには存在しない可能性があります。その結果、インデックス内のどのような色であれ、計算された指標値の土地。

あなたの質問にある画像はインデックス付きのPNGであるため、この問題があります。

この問題が発生した場合は、元のソースイメージを非インデックスカラースペースに変換するか、またはイメージのサイズを変更する必要がある場合にうまくいかないイメージをインデックス付けする前にアンチエイリアスする必要がありますアプリケーションによって、またはさまざまな背景に対してアンチエイリアスを行う必要がある場合などです。

もう1つのことは、バックグラウンドが黒い場合は、黄色の星が正しくアンチエイリアスされていることを、あなたとは異なる背景に対してアンチエイリアスすることです。コードを投稿するのが最も簡単な方法ですこれを把握してください。

+0

イメージは、上にリンクされたライブラリを使用してレンダリングされるSVGグラフィックスです。背景は決して変化しません。それは白いままです。 –

+0

理由を理解するだけです。問題は、SVGが「ハードエッジ」で描かれていることです。通常、アルゴリズムはエッジカラーと背景色の間の色を検出しますが、この例ではsvgが単独でレンダリングされるため背景色はありません。その結果、任意の色が使用されます。そうですか? –

+0

どのようにSVGをレンダリングしていますか? ImageViewsにデータを埋め込んでいるのか、画像として取り込んでキャンバスに描画していますか? – Mark

関連する問題