如何在 Android Java 中关闭 Imageview 的抗锯齿

问题描述

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


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)));

顺便说一下,自动是我想在关闭抗锯齿后看到的图片

但是一个大问题

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

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

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

谢谢

解决方法

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

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,cSmallBitmap.getWidth(),cSmallBitmap.getHeight()),cBigBitmap.getWidth(),cBigBitmap.getHeight()),cPaint);
cImageView.setImageBitmap(cBigBitmap);

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...