Search code examples
androidbitmapdrawableitemizedoverlay

Bitmap drawable (Map Overlay Item) pixelizes after rotation in android


I'm trying to rotate an overlay drawable to represent an overlay item in Android.

I use this:

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

The problem is that the image quality worsens. Pixelization happens. Any solution?


Solution

  • This code worked perfectly with me

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