【问题标题】:What does the filter parameter to createScaledBitmap do?createScaledBitmap 的过滤器参数有什么作用?
【发布时间】:2011-02-23 02:47:19
【问题描述】:

android.graphics.Bitmap.createScaledBitmap的声明是

public static Bitmap createScaledBitmap
  (Bitmap src, int dstWidth, int dstHeight, boolean filter)

但是,文档没有解释任何参数。除了boolean filter,所有这些都非常明显。有人知道它是做什么的吗?

【问题讨论】:

    标签: android scaling


    【解决方案1】:

    扩展 Karan 的回答:作为一般规则,如果您将图像缩放,您不会看到任何差异,但如果您将其缩放,您会看到任何区别/em>。

    传递filter = false 将产生块状像素化图像。

    传递filter = true 将使边缘更平滑。

    但是,正如 EIYeante 在 cmets 中指出的那样,您可能仍然会看到差异。 This is their example image.

    【讨论】:

    • @Mirko - 不,没关系:这应该让我随时获得民粹主义徽章。 :)
    • @ElYeante - 你有例子吗?一些输入和输出图像会很棒。谢谢。
    • 哇。我站得更正了。我很好奇为什么这在你的图像中如此明显,但我没有在我的图像中看到它。是不是因为你的规模缩小了很多?
    • 此标志具有误导性。我们如何在重采样之前通过平滑下采样以防止抗锯齿?
    • 链接已损坏@teedyay
    【解决方案2】:

    快速浏览 SKIA 源代码表明(至少在默认情况下)FILTER 标志会导致它执行直接的双线性插值。查看 Wikipedia 或您最喜欢的图形参考以了解预期的结果。传统上,您希望在放大图像时进行双线性或双三次插值,并在缩小图像时进行区域平均。我得到的印象(尽管我很高兴得到纠正)Android/Skia 在缩小尺寸而不进行过滤时会进行简单的二次采样,因此即使缩小尺寸,您也可能会从过滤中获得更好的结果。 (还有一种通过插值获得高质量缩小尺寸的替代方法,包括进行一系列 50% 的比例缩小。有关详细信息,请参阅 http://today.java.net/pub/a/today/2007/04/03/perils-of-image-getscaledinstance.html。)

    【讨论】:

    • 如果传为假怎么办?最近的邻居?
    • 另外,如果你通过 filter = true,你知道它是否在做面积平均吗?
    • 您应该添加一张图片来感受其中的区别,而不是参考外部资源。链接消失,来源消失。
    • 哈哈,10 多年后@clahey:If this is false then nearest-neighbor scaling is used instead which have worse image quality but is faster. createScaledBitmap 的 javadoc 中
    【解决方案3】:

    过滤器将设置FILTER_BITMAP_FLAG 用于绘画,这会在位图根据您提供的值进行转换时影响位图的采样。

    【讨论】:

    • 对位图的采样有什么影响?
    • 我对位图采样了解不多,可以查看以下wiki页面了解详情。 en.wikipedia.org/wiki/Resampling_%28bitmap%29
    • “影响位图的采样”究竟是什么?效果好还是坏?
    • @Willian Denniss:检查上面的评论。我不知道细节,我还没有尝试过。
    【解决方案4】:

    聚会有点晚了,但我认为一些示例图片可能会澄清问题。

    关于是否以及如何过滤superuser 有一个更普遍的问题。

    杰夫·阿特伍德说:

    一般来说,将较大的图像制作成较小的图像时,您需要一种温和的锐化效果,而将较小的图像制作成较大的图像时,您需要一种温和的模糊效果。

    Android 的 API 没有指定将应用哪种过滤器,所以我想问题是:您希望像素保持原样(就像您在 8 位艺术中所希望的那样)还是可以应用使图像更可口的转换(正如您在照片中所希望的那样)。

    【讨论】:

      【解决方案5】:

      在我研究使用的算法时 filter=false(我需要 100% 确定会产生什么输出),因为我在 android 和 python 上使用相同的 tensorflow lite 模型并发现它filter=false 时使用 NEAREST(在 android 7.1 上测试)。我比较了使用 PIL resample=Image.NEAREST

      时在 android 和 python 上相同的嵌入

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-12-28
        • 1970-01-01
        • 1970-01-01
        • 2016-10-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多