为了账号安全,请及时绑定邮箱和手机立即绑定

调整大小/缩放位图后图像质量不佳

调整大小/缩放位图后图像质量不佳

喵喵时光机 2019-08-26 14:35:25
调整大小/缩放位图后图像质量不佳我正在写一个纸牌游戏,需要我的卡在不同的情况下有不同的尺寸。我将我的图像存储为位图,以便可以快速绘制和重绘(用于动画)。我的问题是,无论我如何尝试和缩放我的图像(无论是通过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 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

我在低屏幕分辨率下有blury图像,直到我禁用了来自资源的位图加载缩放:

Options options = new BitmapFactory.Options();
    options.inScaled = false;
    Bitmap source = BitmapFactory.decodeResource(a.getResources(), path, options);


查看完整回答
反对 回复 2019-08-26
?
千巷猫影

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;

    }


查看完整回答
反对 回复 2019-08-26
?
慕妹3146593

TA贡献1820条经验 获得超9个赞

createScaledBitmap有一个标志,您可以设置是否应过滤缩放的图像。那个标志改善了位图的质量......


查看完整回答
反对 回复 2019-08-26
  • 3 回答
  • 0 关注
  • 455 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信