我试图旋转覆盖绘制在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);
问题是,图像质量恶化。 马赛克发生。 任何解决方案?
此代码与我的工作完美
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);
你可以尝试申请用涂料抗锯齿,但如果其对唯一的机会是过滤和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)
在这里你可以申请一个油漆,你可以用这个漆设置进行试验,但抗混叠将在该位图的边缘工作。 着色器设置可能对位图的工作很好,但没有着色器,可以解决旋转误差
添加以下: 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);