1

Android でオーバーレイ アイテムを表すためにオーバーレイ ドローアブルを回転させようとしています。

私はこれを使用します:

Bitmap bmpOriginal = BitmapFactory.decodeResource(this.getResources(), R.drawable.map_pin);
        Bitmap targetBitmap = Bitmap.createBitmap((bmpOriginal.getWidth()),
                (bmpOriginal.getHeight()), 
                Bitmap.Config.ARGB_8888);

        Matrix matrix = new Matrix();       
        matrix.setRotate((float) lock.getDirection(),(float) (bmpOriginal.getWidth()/2),
                (float)(bmpOriginal.getHeight()/2));

        Canvas tempCanvas = new Canvas(targetBitmap); 
            tempCanvas.drawBitmap(bmpOriginal, matrix, null);
Drawable d = new BitmapDrawable(getResources(),targetBitmap);

            //overlayitem.setMarker(drawable);

    mapItemizedOverlay =
                    new MyItemizedOverlay<MyItemizedOverlayItem>(d, mapView);

問題は、画質が低下することです。ピクセル化が発生します。解決策はありますか?

4

3 に答える 3

2

このコードは私と完全に連携しました

Bitmap bmpOriginal = BitmapFactory.decodeResource(this.getResources(), R.drawable.map_pin);
        Bitmap targetBitmap = Bitmap.createBitmap((bmpOriginal.getWidth()),
                (bmpOriginal.getHeight()), 
                Bitmap.Config.ARGB_8888);
        Paint p = new Paint();
        p.setAntiAlias(true);
        p.setDither(true);
        p.setFilterBitmap(true);

        Matrix matrix = new Matrix();       
        matrix.setRotate((float) lock.getDirection(),(float) (bmpOriginal.getWidth()/2),
                (float)(bmpOriginal.getHeight()/2));

        RectF rectF = new RectF(0, 0, bmpOriginal.getWidth(), bmpOriginal.getHeight());
        matrix.mapRect(rectF);

        targetBitmap = Bitmap.createBitmap((int)rectF.width(), (int)rectF.height(), Bitmap.Config.ARGB_8888);


        Canvas tempCanvas = new Canvas(targetBitmap); 
        tempCanvas.drawBitmap(bmpOriginal, matrix, p);
于 2012-11-05T12:09:54.660 に答える
0

アンチエイリアシングを使用してペイントを適用することもできますが、ビットマップ内の約ピクセルの場合、唯一の可能性はフィルタリングであり、Android には制限があります。ビットマップによっては、本当に滑らかになることは決してないかもしれません。私はたくさん試しましたが、本当に素敵な仕上がりになるものは見つかりませんでした

public static Bitmap createScaledBitmap (Bitmap src, int dstWidth, int dstHeight, boolean filter) 

フィルターのブール値は true である必要があります。これでフィルター処理を行うことができます

void android.graphics.Canvas.drawBitmap(Bitmap bitmap, Rect src, RectF dst, Paint paint)

ここでペイントを適用できます。このペイントの設定を試すことができますが、アンチエイリアスはビットマップのエッジで機能します。シェーダー設定はビットマップでも機能する可能性がありますが、回転の不正確さを修正できるシェーダーはありません

于 2012-10-24T12:40:27.157 に答える