jjzjj

android - 在 Android Imageview 上禁用抗锯齿

coder 2023-12-29 原文

我在 ImageView 中显示 96x96 像素的艺术 Sprite ,如果不应用抗锯齿(或者至少某种形式的插值,如果它不是抗锯齿)就无法显示它,这会破坏锐利的边缘的 Sprite 。

如何做到这一点?我已经尝试了从互联网上获取的以下方法,但都没有用。

方法一

创建带有位图的 xml 资源文件,并将反别名标志设置为 false。根本没用

方法二

从资源中创建位图对象,并将抗锯齿标志设置为 false。根本没用。

    Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.dryad_back_large);
    BitmapDrawable drawable = new BitmapDrawable(getResources(), bitmap);
    drawable.setAntiAlias(false);
    playerMonsterImageView.setImageDrawable(drawable);

方法三 使用足够大的 Sprite ,这样它们永远不需要缩小,只需要放大(512x512 对我有用)

所以这第三种方法可行,但它看起来真的很笨拙,我希望有更好的方法来解决这个问题。

也许我错过了除抗锯齿之外的其他事情?

最佳答案

有多种因素可能会使用抗锯齿缩放图像。

一个是BitmapFactory。例如,如果您有一个 drawable-mdpi 资源并且当前资源配置为 xhdpi,它将在解码时缩放。您可以提供避免这种情况的选项,但最简单的方法是将这些资源放在 drawable-nodpi 中。

默认情况下, Canvas 还使用双线性采样缩放图像。为避免这种情况,在绘制到 Canvas 时,使用带有 .setFilterBitmap(false)Paint。一种方法是使用自定义 Drawable,它用修改所需绘制标志的 DrawFilter 包装底层 .draw() 调用。

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

    public AliasingDrawableWrapper(Drawable wrapped) {
        super(wrapped);
    }

    @Override
    public void draw(Canvas canvas) {
        DrawFilter oldDrawFilter = canvas.getDrawFilter();
        canvas.setDrawFilter(DRAW_FILTER);
        super.draw(canvas);
        canvas.setDrawFilter(oldDrawFilter);
    }
}
imageView.setDrawable(new AliasingDrawableWrapper(getDrawable(R.drawable.bitmap)));

关于android - 在 Android Imageview 上禁用抗锯齿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46028774/

有关android - 在 Android Imageview 上禁用抗锯齿的更多相关文章

  1. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  2. python - 是否可以使用 Ruby 或 Python 禁用 anchor /引用来发出有效的 YAML? - 2

    是否可以在PyYAML或Ruby的Psych引擎中禁用创建anchor和引用(并有效地显式列出冗余数据)?也许我在网上搜索时遗漏了一些东西,但在Psych中似乎没有太多可用的选项,而且我也无法确定PyYAML是否允许这样做.基本原理是我必须序列化一些数据并将其以可读的形式传递给一个不是真正的技术同事进行手动验证。有些数据是多余的,但我需要以最明确的方式列出它们以提高可读性(anchor和引用是提高效率的好概念,但不是人类可读性)。Ruby和Python是我选择的工具,但如果有其他一些相当简单的方法来“展开”YAML文档,它可能就可以了。 最佳答案

  3. ruby-on-rails - 禁用设备的 :confirmable on-the-fly to batch-generate users - 2

    Devise是一个Ruby库,它为我提供了这个User类:classUser当写入:confirmable时,注册时会发送一封确认邮件。上周我不得不批量创建300个用户,所以我在恢复之前注释掉了:confirmable几分钟。现在我正在为用户批量创建创建一个UI,因此我需要即时添加/删除:confirmable。(我也可以直接修改Devise的源码,但我宁愿不去调和它)问题:如何即时添加/删除:confirmable? 最佳答案 WayneConrad的解决方案:user=User.newuser.skip_confirmation

  4. ruby-on-rails - 如何在 Rails 3 中禁用 XML 解析 - 2

    我想禁用HTTP参数的自动XML解析。但我发现命令仅适用于Rails2.x,它们都不适用于3.0:config.action_controller.param_parsers.deleteMime::XML(application.rb)ActionController::Base.param_parsers.deleteMime::XMLRails3.0中的等价物是什么? 最佳答案 根据CVE-2013-0156的最新安全公告你可以将它用于Rails3.0。3.1和3.2ActionDispatch::ParamsParser::

  5. ruby - 从 gemspec/Gemfile 禁用 rdoc 和 ri - 2

    我有一个客户端gem,我将通过ruby​​gems分发业务客户端。Gem客户端有cca​​。十几个gem依赖项,当它被安装时,由于为每个gem生成rdoc和ri,安装它需要很长时间。客户是商业用户,他们对rdoc/ri没有用处,我正在寻找一种通过.gemspec或Gemfile禁用它的方法。我熟悉利用系统文件.gemrc禁用rdoc/ri的解决方案。但这是NotAcceptable解决方案,因为我希望我的安装像键入一样简单:gem安装foo 最佳答案 你可以使用post-installmessage解释他们可以通过运行@shime建

  6. ruby - 在 Ruby 中禁用 OptionParser 标志的自动完成 - 2

    #!/usr/bin/envrubyrequire'optparse'options={}OptionParser.newdo|opts|opts.on("--languageLANGUAGE",["Ruby","JavaScript"])do|language|options[:language]=languageendend.parse!puts"Language:#{options[:language]}"如果我用./bin/example--languageRu运行它,它将输出:Language:Ruby我想禁用此自动完成/最接近的匹配行为,并在未提供确切名称时引发Option

  7. ruby - 使用 Selenium WebDriver 启用/禁用 javascript - 2

    出于某种原因,我必须为Firefox禁用javascript(手动,我们按照提到的步骤执行http://support.mozilla.org/en-US/kb/javascript-settings-for-interactive-web-pages#w_enabling-and-disabling-javascript)。使用Ruby的SeleniumWebDriver如何实现这一点? 最佳答案 是的,这是可能的。而是另一种方式。您首先需要查看链接Selenium::WebDriver::Firefox::Profile#[]=

  8. ruby-on-rails - 在测试环境中禁用地理编码 - 2

    在我的RubyonRails应用程序中,我使用的是Geocoder。它工作正常,但我的测试速度慢了十倍!我找到了一些解决方案,但我认为它们不是很清楚?有什么方法可以在测试环境中禁用Geocoder? 最佳答案 根据gemdocumentationonGithub,您可以在测试中使用测试查找,以避免执行实际请求:Geocoder.configure(:lookup=>:test)Geocoder::Lookup::Test.add_stub("NewYork,NY",[{'latitude'=>40.7143528,'longitud

  9. ruby - 在没有猴子修补的情况下禁用 Rack::CommonLogger - 2

    所以,我想为我的sinatra应用程序完全自定义日志记录,但我似乎无法禁用Rack::CommonLogger。根据sinatradocs我需要做的就是添加以下行(也尝试将其设置为false):set:logging,nil我的配置。但是,这不起作用,我仍然在我的终端中收到类似Apache的日志消息。所以到目前为止我找到的唯一解决方案就是猴子修补这该死的东西。moduleRackclassCommonLoggerdefcall(env)#donothing@app.call(env)endendend如果可以在不恢复此类问题的情况下禁用它,有人有任何想法吗?

  10. ruby - 在 Active Admin 中禁用 CSV 下载 - 2

    我正在使用ActiveAdmingem,我想隐藏或删除每个模型索引页面上的链接,允许用户以CSV、XML或JSON格式下载数据。有什么办法吗? 最佳答案 index方法上现在有一个选项:download_links,因此您可以根据需要省略下载链接。例如:ActiveAdmin.registerPostdoindex:download_links=>falsedo#whateverendend 关于ruby-在ActiveAdmin中禁用CSV下载,我们在StackOverflow上找到一

随机推荐