位图绘制(地图覆盖项目)在Android的旋转后pixelizes(Bitmap drawable

2019-10-17 08:41发布

我试图旋转覆盖绘制在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);

问题是,图像质量恶化。 马赛克发生。 任何解决方案?

Answer 1:

此代码与我的工作完美

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);


Answer 2:

你可以尝试申请用涂料抗锯齿,但如果其对唯一的机会是过滤和Android有其局限性位图内的像素。 根据不同的位图,你可能永远能够获得非常流畅的,我也尝试了很多,但从来没有发现任何东西,想给它一个真正的好光洁度

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

过滤器布尔应该是真实的,这就是所有你可以过滤做AFAIK

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

在这里你可以申请一个油漆,你可以用这个漆设置进行试验,但抗混叠将在该位图的边缘工作。 着色器设置可能对位图的工作很好,但没有着色器,可以解决旋转误差



Answer 3:

添加以下: Paint p = new Paint(); p.setAntiAlias(true); p.setDither(true); p.setFilterBitmap(true); Paint p = new Paint(); p.setAntiAlias(true); p.setDither(true); p.setFilterBitmap(true);

改变如下: tempCanvas.drawBitmap(bmpOriginal, matrix, null); 于: tempCanvas.drawBitmap(bmpOriginal, matrix, p);



文章来源: Bitmap drawable (Map Overlay Item) pixelizes after rotation in android