这不是您链接的代码的功能吗?它获取一个彩色位图(“ bmp”),创建一个重复的位图(“ bm”),然后使用过滤器将该颜色位图绘制为“ bm”,将其转换为灰度。从那时起,您可以将“ bm”用作实际的灰度位图,并进行任何您想使用的位图。
您需要稍微调整一下样本(它使用的是硬编码的大小,您可能只想克隆原始位图的大小),但是除此之外,这似乎已经可以立即使用了。 ,具体取决于您的需求。
0
这不是您链接的代码的功能吗?它获取一个彩色位图(“ bmp”),创建一个重复的位图(“ bm”),然后使用过滤器将该颜色位图绘制为“ bm”,将其转换为灰度。从那时起,您可以将“ bm”用作实际的灰度位图,并进行任何您想使用的位图。
您需要稍微调整一下样本(它使用的是硬编码的大小,您可能只想克隆原始位图的大小),但是除此之外,这似乎已经可以立即使用了。 ,具体取决于您的需求。
0
我要提到的是,使用这种方法必须考虑一个重要方面。 Android上的BitMap存储在NativeHeap中。通过仅“创建位图”,您最终将阻塞内存,并获得OutOfMemoryException
(OOM)。
因此,位图必须始终为.recycled()
。
0
如果要在ImageView
上显示该位图。然后,您可以尝试以下代码,而不是将位图转换为灰度:
ColorMatrix matrix = new ColorMatrix();
matrix.setSaturation(0);
ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix);
imageview.setColorFilter(filter);
0
哦,是的,确实如此。我用错了,感谢您向我指出。 (很抱歉,这个无用的问题)这是结束代码(很大程度上基于所链接的代码),因为它可以帮助某人:
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;
}
非常欢迎对此发表任何评论或评论。
谢谢
0
我是这个网站的新手,并且提出了有关Android的问题。
有什么办法可以将位图转换为灰度?我知道如何绘制灰度位图(使用画布操作: http : //www.mail-archive.com/android-developers@googlegroups.com/msg38890.html ),但我确实需要使用灰色的实际位图(或至少可以在以后转换为位图的东西)。我是否必须手动实现它(逐像素操作)?
我已经搜索了很多,但仍然找不到。任何人都知道一种简单/有效的方法吗?
非常感谢!