我正在尝试旋转叠加drawable以表示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);
问题是图像质量恶化。像素化发生了。任何解决方案?
答案 0 :(得分: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);
答案 1 :(得分:0)
您可以尝试使用抗锯齿来应用绘制,但如果它位于位图中的像素,则唯一的机会是过滤并且android有其限制。根据位图,你可能永远无法让它变得非常流畅,我确实尝试了很多,但从来没有找到任何可以让它真正完美的完成
public static Bitmap createScaledBitmap (Bitmap src, int dstWidth, int dstHeight, boolean filter)
过滤器布尔值应为true,这就是你可以为afaik过滤所做的一切
void android.graphics.Canvas.drawBitmap(Bitmap bitmap, Rect src, RectF dst, Paint paint)
在这里你可以应用一个颜色,你可以在这个颜色上试验设置,但是反别名可以在位图的边缘上工作。着色器设置也可能对位图有效,但没有可以修复旋转不准确的着色器
答案 2 :(得分:0)
添加以下内容:
Paint p = new Paint();
p.setAntiAlias(true);
p.setDither(true);
p.setFilterBitmap(true);
更改以下内容:
tempCanvas.drawBitmap(bmpOriginal, matrix, null);
至:
tempCanvas.drawBitmap(bmpOriginal, matrix, p);