2013-01-07 14 views
6

私のアプリケーションでは、drawBitmap()を使用してズームアウトしながら低解像度のビットマップを表示します。私はいくつかのデバイス(Galaxy Tab、Kindle Fire、Moto Xoom、Nexus 7)でテストしました。 Nexus 7以外では、同じレンダリング品質が得られます。添付されたスクリーンショットでその違いを見ることができます。私は私が得るマトリックスなく、他のバリアントdrawBitmap(ビットマップビットマップ、RectをSRC、RectF dstは、ペイント塗料)を使用してみた場合描画出力が異なるdrawBitmap(Nexus 7と他のデバイス)

mSrcRectF.set(src_x1, src_y1, src_x2, src_y2); 
mDesRectF.set(view_x1, view_y1, view_x2, view_y2); 
mMatrix.setRectToRect(mSrcRectF, mDesRectF, Matrix.ScaleToFit.CENTER); 
canvas.drawBitmap(bmp, mMatrix, mPagePaint); 

:外側領域は、私はdrawBitmap、このようなものを使用しているものです同じ結果。

この問題は、ハードウェアアクセラレーションと関連している可能性があります。それを(マニフェストファイルで)無効にすると、すべてのデバイスで同じ結果が得られます。これをオンにすると、Nexusを除くすべてのレンダリングが改善されます.Nexusでは、さらに「ピクセル化された」ビットマップが表示されます。私はいくつかのルーチンがHAでサポートされていないことを読んだが、それでも、この場合何が起こっているのか理解できません。彼のブログのロマンガイの最近の記事では、

のようにコメントしています。アルファビットマップは、drawBitmap()の「シンプル」バージョンを呼び出すときにのみシェイダーで動作します。 Matrixやソースとデスティネーションの長方形を使用するバリアントは、現時点ではハードウェアアクセラレーションではサポートされていません。

誰かがこれについていくつか光を当てることができますか?

ネクサス7:Nexus 7 screen shot

Xoomの(またはギャラクシータブ、Kindleの火災):Xoom screen shot

答えて

1

あなたは選択的にですthis Stack Overflow article

の指示に従ってお使いのキャンバスのためのハードウェアアクセラレーションをオフにすることができるかもしれ理想的な解決策ではありませんが、drawBitmap()のすべてのオプションがハードウェアアクセラレーションでサポートされるまで、残りのアプリケーションでハードウェアアクセラレーションの利点を得ることができます。

+0

ええ、私は彼らがそれをサポートしてくれるまで、それを保つ必要があると思います。 – Ander

関連する問題