Bitmap drawable (Map Overlay Item) pixelizes after rotation in android
我正在尝试旋转覆盖可绘制对象以表示 Android 中的覆盖项。
我用这个:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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); |
问题是图像质量变差了。像素化发生。有什么解决办法吗?
这段代码非常适合我
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 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); |
添加以下内容:
p.setAntiAlias(true);
p.setDither(true);
p.setFilterBitmap(true);
更改以下内容:
到:
您可以尝试使用抗锯齿绘制,但如果它与位图中的像素有关,则唯一的机会是过滤,并且 android 有其限制。根据位图,您可能永远无法使其真正平滑,我确实尝试了很多,但从未找到任何可以让它真正完成的东西
1 | public static Bitmap createScaledBitmap (Bitmap src, int dstWidth, int dstHeight, boolean filter) |
过滤器布尔值应该为真,这就是过滤afaik可以做的所有事情
1 | void android.graphics.Canvas.drawBitmap(Bitmap bitmap, Rect src, RectF dst, Paint paint) |
您可以在此处应用绘画,您可以在此绘画上尝试设置,但抗锯齿将在位图的边缘起作用。着色器设置也可能适用于位图,但没有可以修复旋转不准确的着色器