createScaledBitmap的filter参数有什么作用?

时间:2010-05-24 06:05:39

标签: android scaling

android.graphics.Bitmap.createScaledBitmap的声明是

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

但是,文档没有解释任何参数。除了boolean filter之外,所有这些都非常明显。有谁知道它的作用?

5 个答案:

答案 0 :(得分:247)

扩展Karan的答案:作为一般规则,如果您将图像缩小,您将看不到任何差异,但如果您正在缩放 up < / em>的

传递filter = false会产生一个块状的像素化图像。

传递filter = true将为您提供更平滑的边缘。

然而,正如EIYeante在评论中指出的那样,你可能仍会看到不同之处。 This is their example image.

答案 1 :(得分:85)

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

答案 2 :(得分:3)

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

答案 3 :(得分:0)

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

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

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

杰夫·阿特伍德说:

通常,当将较大的图像制成较小的图像时,您希望具有适度的锐化效果;而将较小的图像制成较大的图像时,则希望具有适度的模糊效果。

image filters compared

答案 4 :(得分:0)

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