1

マトリックスを使用してキャンバスにビットマップを表示しようとしています。

      canvas.drawBitmap(currentBitmap, m_matrix, tempPaint);

しかし、結果が表示され、画像が奇妙に見えます。その後、境界を使用してそれを示しました

     canvas.drawBitmap(currentBitmap, 0, 0, tempPaint);

しかし、ここでは画像は見栄えがよく、どちらの場合も画像は拡大縮小されていません。

初期表示のマトリックスプロパティをどのように設定する必要がありますか?

その画像が変更されているため、マトリックス表示は画像を表示するために何か他のものを使用していますか?

詳細な説明については、チュートリアルを提案してください。

4

2 に答える 2

0

たくさん検索した後、私は最終的に解決策を見つけました、同じ問題に関連するスレッドのいくつかは私を助けました。

品質問題

実行時に画像のサイズを変更する際の品質の問題

私は、ビットマップをロードするためのグーグルのチュートリアルに従い、ビットマップをスケーリングするための独自の関数を作成しました。

public static Bitmap scaleDownBitmap(Bitmap original, boolean recycleOriginal, int newmaxWidth , int newmaxHeight){

        if(original == null)
             return null;

        Bitmap rtr= null;
        try{

                int origWidth  = original.getWidth();
                int origHeight = original.getHeight();


                if(origWidth <= newmaxWidth && origHeight <= newmaxWidth){
                        Bitmap b = Bitmap.createBitmap(original);
                        if (recycleOriginal && (original != b))
                            original.recycle();
                    return b;
                }

                int newWidth = 0;
                int newHeight = 0;

                float ratio;

                if(origWidth > origHeight){
                        ratio = (float)origWidth/(float)origHeight;
                        newWidth = newmaxWidth;
                        newHeight = (int)((float)newWidth/ratio);

                } 
                else{
                        ratio = (float)origHeight/(float)origWidth;
                        newHeight = newmaxHeight;
                        newWidth = (int)((float)newHeight/ratio);
                }

                rtr = CreateScaledBitmap(original , newWidth , newHeight);

                if(recycleOriginal && original != rtr)
                        original.recycle();

        }
        catch (Exception e) {
            Log.d("Image Compress Error", e.getMessage());
        }

        return rtr;

 }

     public static Bitmap CreateScaledBitmap(Bitmap paramBitmap, int paramInt1, int paramInt2)
   {
        Bitmap localBitmap = Bitmap.createBitmap(paramInt1, paramInt2, paramBitmap.getConfig());
        Canvas localCanvas = new Canvas(localBitmap);
        localCanvas.setDrawFilter(new PaintFlagsDrawFilter(0, 2));
        localCanvas.drawBitmap(paramBitmap, new Rect(0, 0, paramBitmap.getWidth(), paramBitmap.getHeight()),
                                            new Rect(0, 0, paramInt1, paramInt2), null);
    return localBitmap;
}

画像を取得した後、次のパラメータをペイントに渡しました。

tempPaint.setFilterBitmap(true); //Line 1
canvas.drawBitmap(currentBitmap, m_matrix, tempPaint);
于 2012-09-28T05:39:36.140 に答える
0

Matrix を使用する必要があります。以下の例のように、post scale を使用して画像をスケーリングします。

プライベートボイド drawMatrix(){

マトリックス マトリックス = 新しいマトリックス(); matrix.postScale(curScale, curScale);

 canvas.drawBitmap(currentBitmap, matrix, tempPaint);} 

まだ試していません....しかし、うまくいくはずです...

于 2012-09-27T05:45:06.853 に答える