6

私のアプリケーションでは、drawBitmap()を使用して、ズームアウトしているときに低解像度のビットマップを表示します。いくつかのデバイス(Galaxy Tab、Kindle Fire、Moto Xoom、Nexus 7)でテストしました。Nexus 7を除いて、すべて同じレンダリング品質が得られます。添付の​​スクリーンショットで違いを確認できます。外側の領域は、drawBitmapを使用している領域で、次のようになります。

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(ビットマップビットマップ、Rect src、RectF dst、ペイントペイント)を使用しようとすると、同じ結果が得られます。

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

アルファビットマップは、「単純な」バージョンのdrawBitmap()を呼び出す場合にのみシェーダーで機能することに注意してください。マトリックスまたはソースと宛先の長方形を使用するバリアントは、現時点ではハードウェアアクセラレーションではサポートされていません。

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

Nexus 7:Nexus7のスクリーンショット

Xoom(またはGalaxy Tab、Kindle Fire):Xoomのスクリーンショット

4

1 に答える 1

1

このStackOverflowの記事の手順に従って、Canvasのハードウェアアクセラレーションを選択的にオフにできる場合があります

これは理想的なソリューションではありませんが、drawBitmap()のすべてのオプションがハードウェアアクセラレーションでサポートされるまで、アプリの残りの部分でハードウェアアクセラレーションのメリットを享受できる可能性があります。

于 2013-01-22T21:14:18.850 に答える