调整/缩放位图后图像质量不佳
我正在写一款纸牌游戏,并且需要我的卡在不同情况下的大小不同。 我将图像存储为位图,以便它们可以快速绘制和重绘(用于动画)。
我的问题是,不管我如何尝试和缩放我的图像(无论是通过matrix.postScale,matrix.preScale还是createScaledBitmap函数),它们总是出现像素化和模糊。 我知道它的缩放是导致问题的原因,因为在绘制时没有调整大小,图像看起来很完美。
我已经完成了这两个线程中描述的每个解决方案:
在运行时调整图像的android质量
在运行时调整图像大小时出现质量问题
但仍然没有得到任何地方。
我用这个代码存储我的位图(到hashmap中):
cardImages = new HashMap<Byte, Bitmap>();
cardImages.put(GameUtil.hearts_ace, BitmapFactory.decodeResource(r, R.drawable.hearts_ace));
并用此方法绘制它们(在Card类中):
public void drawCard(Canvas c)
{
//retrieve the cards image (if it doesn't already have one)
if (image == null)
image = Bitmap.createScaledBitmap(GameUtil.cardImages.get(ID),
(int)(GameUtil.standardCardSize.X*scale), (int)(GameUtil.standardCardSize.Y*scale), false);
//this code (non-scaled) looks perfect
//image = GameUtil.cardImages.get(ID);
matrix.reset();
matrix.setTranslate(position.X, position.Y);
//These methods make it look worse
//matrix.preScale(1.3f, 1.3f);
//matrix.postScale(1.3f, 1.3f);
//This code makes absolutely no difference
Paint drawPaint = new Paint();
drawPaint.setAntiAlias(false);
drawPaint.setFilterBitmap(false);
drawPaint.setDither(true);
c.drawBitmap(image, matrix, drawPaint);
}
任何有识之士将不胜感激。 谢谢
我在低屏幕分辨率下使用了blury图像,直到我禁用从资源上的位图加载缩放:
Options options = new BitmapFactory.Options();
options.inScaled = false;
Bitmap source = BitmapFactory.decodeResource(a.getResources(), path, options);
使用createScaledBitmap会使你的图像看起来很糟糕。 我遇到了这个问题,我解决了它。 下面的代码将解决这个问题:
public Bitmap BITMAP_RESIZER(Bitmap bitmap,int newWidth,int newHeight) {
Bitmap scaledBitmap = Bitmap.createBitmap(newWidth, newHeight, Config.ARGB_8888);
float ratioX = newWidth / (float) bitmap.getWidth();
float ratioY = newHeight / (float) bitmap.getHeight();
float middleX = newWidth / 2.0f;
float middleY = newHeight / 2.0f;
Matrix scaleMatrix = new Matrix();
scaleMatrix.setScale(ratioX, ratioY, middleX, middleY);
Canvas canvas = new Canvas(scaledBitmap);
canvas.setMatrix(scaleMatrix);
canvas.drawBitmap(bitmap, middleX - bitmap.getWidth() / 2, middleY - bitmap.getHeight() / 2, new Paint(Paint.FILTER_BITMAP_FLAG));
return scaledBitmap;
}
createScaledBitmap
有一个标志,您可以设置是否缩放图像应该被滤除。 该标志提高了位图的质量......
上一篇: Bad image quality after resizing/scaling bitmap
下一篇: How to scale an Image in ImageView to keep the aspect ratio