Android 如何把Bitmap转成黑白

引言

在Android开发过程中,有时需要将一张彩色图片转换成黑白图片,以满足特定需求或优化应用性能。本文将介绍如何使用Android的Bitmap类来实现这个功能。

问题描述

给定一张彩色图片,要求将其转换成黑白图片。黑白图片保留原始图片的形状和细节,只是将其颜色全部转换为黑色和白色。

解决方案

Android提供了Bitmap类,可以方便地操作图片像素。我们可以使用Bitmap对象的getPixel方法获取每个像素点的颜色值,并根据一定的计算规则将其转换成黑色或白色。以下是实现的步骤:

  1. 加载图片:使用BitmapFactory类的decodeResource方法从资源文件中加载一张图片。
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image);
  1. 获取图片的宽度和高度:使用Bitmap对象的getWidth和getHeight方法获取图片的尺寸。
int width = bitmap.getWidth();
int height = bitmap.getHeight();
  1. 创建新的Bitmap对象:使用Bitmap类的createBitmap方法创建一张新的图片,宽度和高度与原始图片相同。
Bitmap blackAndWhiteBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
  1. 遍历每个像素点:使用两层循环遍历每个像素点的坐标。
for (int x = 0; x < width; x++) {
    for (int y = 0; y < height; y++) {
        // 处理每个像素点的颜色值
    }
}
  1. 获取像素点的颜色值:使用Bitmap对象的getPixel方法获取每个像素点的颜色值。
int pixel = bitmap.getPixel(x, y);
  1. 计算灰度值:将彩色图片的像素点转换成灰度值,可以使用以下计算公式:
灰度值 = (红色值 * 0.299) + (绿色值 * 0.587) + (蓝色值 * 0.114)
  1. 转换成黑白颜色:根据灰度值,将像素点的颜色值转换成黑色或白色。
int grayValue = (int) (red * 0.299 + green * 0.587 + blue * 0.114);
int blackWhiteColor = Color.rgb(grayValue, grayValue, grayValue);
  1. 设置像素点的颜色值:使用Bitmap对象的setPixel方法设置新的像素点的颜色值。
blackAndWhiteBitmap.setPixel(x, y, blackWhiteColor);
  1. 显示黑白图片:使用ImageView控件显示转换后的黑白图片。
imageView.setImageBitmap(blackAndWhiteBitmap);

示例代码

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image);
int width = bitmap.getWidth();
int height = bitmap.getHeight();
Bitmap blackAndWhiteBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);

for (int x = 0; x < width; x++) {
    for (int y = 0; y < height; y++) {
        int pixel = bitmap.getPixel(x, y);
        int red = Color.red(pixel);
        int green = Color.green(pixel);
        int blue = Color.blue(pixel);
        int grayValue = (int) (red * 0.299 + green * 0.587 + blue * 0.114);
        int blackWhiteColor = Color.rgb(grayValue, grayValue, grayValue);
        blackAndWhiteBitmap.setPixel(x, y, blackWhiteColor);
    }
}

imageView.setImageBitmap(blackAndWhiteBitmap);

总结

通过以上步骤,我们可以将一张彩色图片转换成黑白图片。这种转换方式可以在Android应用中使用,例如实现黑白滤镜效果、提高图片显示性能等。通过Bitmap类的像素操作,我们可以有效地处理和修改图片,满足各种需求。