2011-01-10 9 views
5

現在、最初のAndroidアプリを開発しており、画像をレンダリングする際に問題が発生しています。画像そのものは素晴らしい品質ですが、レンダリングすると画質が大幅に低下します。エッジはギザギザになり、ちょうど良くないように見えます。私がこれまでに示したことは、すぐにそれに気づくことなく、気づいたことがあります。 [右に左に、最後に開始:]私はすべてをしようとしているAndroidでレンダリングされた画像のギザギザのエッジ

http://i.stack.imgur.com/gld5A.png

私が知っおよびすべての私は、オンラインの周りに検索することにより見つけることができました先端が、何もそれを修正するようです。

現在、私は、ビットマップとして画像を取得し、それをスケーリング:私はイメージを持っている

Bitmap holeImage = BitmapFactory.decodeResource(res, R.drawable.hole_image); 
Bitmap holeImageBMP = Bitmap.createScaledBitmap(holeImage, width, height, true); 

たら、私は、ペイントを作成trueにいくつかの平滑化属性を設定し、キャンバス上に描画します:

Paint smoothingPaint = new Paint(); 
smoothingPaint.setAntiAlias(true); 
smoothingPaint.setFilterBitmap(true); 
smoothingPaint.setDither(true); 
canvas.drawBitmap(holeImageBMP, 0, 0, smoothingPaint); 

ただし、明らかに上記のように、画質が大幅に低下します。私はきれいにレンダリングされているイメージがたくさん見られました。正直なところ、何が起こっているのか分からないので、どんなアドバイスも素晴らしいと思います!

その他の注意:私はDrawViewを処理するためにSurfaceViewメソッドを使用しています。これは、SDKにあるLunarLanderの例と似ています。

もう一度おねがいします!

答えて

0

元の画像よりもはるかに少ない色に制限されていない場合(Androidには256色モードがありますか?)、ditheringを無効にすることをおすすめします。画像を拡大すると、おそらく滑らかな外観を破壊する。

あなたのケースでは、ディザリングは、アンチエイリアスが滑らかな外観に必要な追加の色を破壊することによって、アンチエイリアスを推論します。あなたの写真(約850点、右面140点)の色数を確認すると、これが確認できます。

+0

私はそれを試してみましたが、それが本当の違いを行っていない:

は、Androidデバイスでより良い動作するために、この問題(バンディングやディザリング)に、この偉大な記事を読んで、あなたが作成した画像を適応を検討してみてください。私は別のstackoverflow.comスレッドの誰かがそれを示唆したためにそこにある唯一の理由を認めます:P私は思考に感謝!本当にどんなアイデアが役に立ちます。 –

+0

OK、私はこのケースではPedroの答えがもっと役に立つと思います。私はまだAndroidで何もしていないので、ディザリングやバンディングの問題があるのか​​分かりませんでしたし、一般的なグラフィックスに関する答えを出しました。 – schnaader

+0

十分に公正です。もう一度ありがとう! :D –

1

これはおそらく、あるフォーマットから別のフォーマットへの画像の変換に関係しています。また、アンドロイド画面はデバイスによって異なります。別のデバイスを使用しようとすると、よりよく見えるかもしれません...ほぼ確実にそれは異なる音調になります。 http://www.curious-creature.org/2010/12/08/bitmap-quality-banding-and-dithering/

+0

アドバイスをいただきありがとうございます!私はいくつかの異なるデバイス(主にIncredibleとDroid X、上で撮ったイメージはエミュレータからのものです)で試してみました。代わりにPNGの代わりにビットマップとしてファイルを保存するのだろうか?そして、私はその記事を読むでしょう - それは有望に見えます。ありがとう! –

関連する問題