【问题标题】:Make Gauss filter robust to variable color depth使高斯滤波器对可变颜色深度具有鲁棒性
【发布时间】:2012-11-12 22:07:44
【问题描述】:

我正在为 android 编写一个高斯滤波器。

根据本教程的 GaussFilter 示例:http://www.jhlabs.com/ip/blurring.html 我正在像这样编辑我的 ALPHA 值

alpha += f * ((pixelValue >> 24) & 0xff);

根据这个线程: Using logical bitshift for RGB values

 (pixelValue >>24 & 0xff);

不等于

Color.alpha(pixelValue);

据我所知,Alpha 通道在 RGB 中是可选的。 所以这取决于我阅读和编辑 alpha 和 rgb 值的深度。

有很多不同颜色深度的组合,例如:

  • 4 位无 alpha
  • 4 位 + 4 位 alpha
  • 24 位,包括 alpha (?)
  • Macintosh 提供 24 位加(或包括?)8 位 alpha

由于我不知道用户想要处理哪种类型的图像,所以我必须捕获所有组合。我只是使用 Color.Red(value), Color.Green(value) ...但我不确定这最终是否会太慢?我可以在处理之前将每个输入转换为 24 位位图,但这需要太长时间。

感谢您的帮助,谢谢。

【问题讨论】:

    标签: android converter rgb gaussian


    【解决方案1】:
    1. 首先,如果你担心性能,你应该实现它并衡量它。

    2. 如果您想要尽可能快的实现,您几乎必须针对每种像素格式对其进行专门化。但很可能您只需要处理一个,见下文。

    3. 1234563 ,但我不期望具有如此小的每像素位数的良好模糊效果)。实际上,根据BitmapFactory.Options 文档,位图默认加载ARGB_8888 配置。换句话说 - 使用标准 Android 的位图处理 API,您无需进行任何转换,它为您完成 - 只需指定您需要的格式。
    4. 事实上(pixelValue >>24 & 0xff);Color.alpha(pixelValue); 等价于ARGB_8888 像素格式,但是可以做得更好。

    使用逻辑移位运算符(相对于>>,算术移位)您根本不需要& 0xFF 运算,因为位31..8 始终为0。看看Color.alpha() 是如何实现的:

    public static int alpha(int color) {
        return color >>> 24;
    }
    

    【讨论】:

    • 欢迎您。还有什么我可以解释的吗?无论如何都有赏金等待;)
    • 我还要再等 2 个小时才能收到赏金 ;)
    • 你成就了我的一天,rotfl :)
    猜你喜欢
    • 1970-01-01
    • 2013-03-29
    • 1970-01-01
    • 2018-10-03
    • 2018-01-26
    • 2013-02-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    相关资源
    最近更新 更多