调整大小/缩放位图后图像质量不佳我正在写一个纸牌游戏,需要我的卡在不同的情况下有不同的尺寸。我将我的图像存储为位图,以便可以快速绘制和重绘(用于动画)。我的问题是,无论我如何尝试和缩放我的图像(无论是通过matrix.postScale,matrix.preScale还是createScaledBitmap函数),它们总是出现像素化和模糊。我知道它导致问题的缩放因为在没有调整大小的情况下绘制时图像看起来很完美。但还是没有到达任何地方。我用这段代码存储我的位图(到一个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);}任何见解将不胜感激。谢谢
3 回答
![?](http://img1.sycdn.imooc.com/5458622b000117dd02200220-100-100.jpg)
不负相思意
TA贡献1777条经验 获得超10个赞
我在低屏幕分辨率下有blury图像,直到我禁用了来自资源的位图加载缩放:
Options options = new BitmapFactory.Options(); options.inScaled = false; Bitmap source = BitmapFactory.decodeResource(a.getResources(), path, options);
![?](http://img1.sycdn.imooc.com/54586453000163bd02200220-100-100.jpg)
千巷猫影
TA贡献1829条经验 获得超7个赞
使用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; }
- 3 回答
- 0 关注
- 455 浏览
添加回答
举报
0/150
提交
取消