在Android中将位图转换为GrayScale
image-processing
4
0

我是这个网站的新手,并且提出了有关Android的问题。

有什么办法可以将位图转换为灰度?我知道如何绘制灰度位图(使用画布操作: http : //www.mail-archive.com/android-developers@googlegroups.com/msg38890.html ),但我确实需要使用灰色的实际位图(或至少可以在以后转换为位图的东西)。我是否必须手动实现它(逐像素操作)?

我已经搜索了很多,但仍然找不到。任何人都知道一种简单/有效的方法吗?

非常感谢!

参考资料:
Stack Overflow
收藏
评论
共 4 个回答
高赞 时间 活跃

这不是您链接的代码的功能吗?它获取一个彩色位图(“ bmp”),创建一个重复的位图(“ bm”),然后使用过滤器将该颜色位图绘制为“ bm”,将其转换为灰度。从那时起,您可以将“ bm”用作实际的灰度位图,并进行任何您想使用的位图。

您需要稍微调整一下样本(它使用的是硬编码的大小,您可能只想克隆原始位图的大小),但是除此之外,这似乎已经可以立即使用了。 ,具体取决于您的需求。

收藏
评论

我要提到的是,使用这种方法必须考虑一个重要方面。 Android上的BitMap存储在NativeHeap中。通过仅“创建位图”,您最终将阻塞内存,并获得OutOfMemoryException (OOM)。

因此,位图必须始终为.recycled()

收藏
评论

如果要在ImageView上显示该位图。然后,您可以尝试以下代码,而不是将位图转换为灰度:

ColorMatrix matrix = new ColorMatrix();
matrix.setSaturation(0);

ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix);
imageview.setColorFilter(filter);

以供参考

收藏
评论

哦,是的,确实如此。我用错了,感谢您向我指出。 (很抱歉,这个无用的问题)这是结束代码(很大程度上基于所链接的代码),因为它可以帮助某人:

public Bitmap toGrayscale(Bitmap bmpOriginal)
{        
    int width, height;
    height = bmpOriginal.getHeight();
    width = bmpOriginal.getWidth();    

    Bitmap bmpGrayscale = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    Canvas c = new Canvas(bmpGrayscale);
    Paint paint = new Paint();
    ColorMatrix cm = new ColorMatrix();
    cm.setSaturation(0);
    ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm);
    paint.setColorFilter(f);
    c.drawBitmap(bmpOriginal, 0, 0, paint);
    return bmpGrayscale;
}

非常欢迎对此发表任何评论或评论。

谢谢

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号