【问题标题】:How to turn off Anti-Aliasing of an Imageview in Android Java如何在 Android Java 中关闭 Imageview 的抗锯齿功能
【发布时间】:2021-02-27 22:07:10
【问题描述】:

我在网上搜索了很多时间,做了一个这样的代码:


import android.app.Activity;
import android.os.Bundle;
import android.graphics.DrawFilter;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.view.View;
import android.graphics.drawable.DrawableWrapper;
import android.graphics.drawable.Drawable;
import android.graphics.*;


public class math_math extends DrawableWrapper {
    private final DrawFilter DRAW_FILTER =
        new PaintFlagsDrawFilter(Paint.FILTER_BITMAP_FLAG, 0);

    public math_math(Drawable wrapped) {
        super(wrapped);
        wrapped.setFilterBitmap(false);
    }

    @Override
    public void draw(Canvas canvas) {
        super.draw(canvas);
        
    }
}

在 MainActivity onCreate 我运行此代码以关闭抗锯齿:

imageview1.setImageDrawable(new math_math(getDrawable(R.drawable.auto)));

顺便说一下,auto 是我想在关闭抗锯齿的情况下看到的图片

但是有个大问题

应用程序对图像执行此操作: https://i.stack.imgur.com/8IlB6.png

但是图像应该是这样的: https://i.stack.imgur.com/UnUzg.png

请有人帮忙,我的代码有什么问题。

谢谢

【问题讨论】:

    标签: java android canvas imageview antialiasing


    【解决方案1】:

    如果您想在更大的视图中显示小图像而不触发位图自动缩放,则必须进行手动缩放:

    final Bitmap cSmallBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.auto);
    final Bitmap cBigBitmap = Bitmap.createBitmap(600, 600, Bitmap.Config.ARGB_8888);
    final Canvas cCanvas = new Canvas(cBigBitmap);
    final Paint cPaint = new Paint();
    cPaint.setAntiAlias(false);
    cPaint.setDither(false);
    cPaint.setFilterBitmap(false);
    cCanvas.drawBitmap(cSmallBitmap, new Rect(0, 0, cSmallBitmap.getWidth(), cSmallBitmap.getHeight()), new Rect(0, 0, cBigBitmap.getWidth(), cBigBitmap.getHeight()), cPaint);
    cImageView.setImageBitmap(cBigBitmap);
    

    【讨论】:

    • 我很高兴,你的回答!但它似乎不起作用。 :( 我试过了,但看起来一样。祝你有美好的一天!
    • 在“cImageView.setImageBitmap(cBigBitmap);”上放一个断点并在调试模式下运行它。然后评估 (ALT+F8) "cBigBitmap" 以查看它是否因逐像素缩放而变大和“像素化”或“模糊”。
    • 我的代码不处理比例。我写了 600x600 BigBitmap,但这不是你需要的。
    • 好的,我明白了...顺便说一句,如果找到解决我问题的其他选项,那么我不需要关闭此抗锯齿功能。但是,我认为你的代码会帮助其他人,在类似的情况下......谢谢你的时间...... :)
    猜你喜欢
    • 1970-01-01
    • 2017-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    相关资源
    最近更新 更多