lep*_*lon 55 android bitmap image-processing grayscale
我是这个网站的新手,我提出了一个关于Android的问题.
有没有办法将位图转换为灰度?我知道如何绘制灰度位图(使用画布操作:http://www.mail-archive.com/android-developers@googlegroups.com/msg38890.html)但我真的需要灰色的实际位图(或者至少可以在以后转换为位图的东西).我是否必须手动实现(逐像素操作)?
我搜索了很多,但仍然找不到.谁知道一个简单/有效的方法呢?
非常感谢!
lep*_*lon 148
哦,是的,确实如此.我使用它错了,谢谢你指出我.(抱歉无用的问题)这是最终代码(很大程度上基于链接的一个),因为它可以帮助某人:
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;
}
Run Code Online (Sandbox Code Playgroud)
任何评论或评论都非常受欢迎.
谢谢
E P*_*lus 18
如果你要显示Bitmap ImageView.然后,您可以尝试下面的代码,而不是将位图转换为灰度.
ColorMatrix matrix = new ColorMatrix();
matrix.setSaturation(0);
ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix);
imageview.setColorFilter(filter);
Run Code Online (Sandbox Code Playgroud)
Ebo*_*ike 14
这与您链接的代码不完全相同吗?它采用颜色位图("bmp"),创建重复的位图("bm"),然后使用滤镜将颜色位图绘制为"bm",将其转换为灰度.从那时起,您可以使用"bm"作为实际的灰度位图,并执行您想要做的任何事情.
您需要稍微调整一下示例(它使用硬编码的大小,您可能只想克隆原始位图的大小),但除此之外,这似乎是随时可用的,取决于你想要的.
小智 14
我想提一下,通过这种方法,必须考虑一个重要方面.Android上的BitMap存储在NativeHeap中.通过"创建位图",你最终会堵塞内存,得到一个OutOfMemoryException(OOM).
因此,位图必须始终如此.recycled().