仅以一种颜色 space 组件值的灰度显示位图

Display Bitmap in gray scale of one color space component value only

我想知道如何以灰度显示彩色位图。必须分别为每个颜色 space 组件完成。可能不是很清楚,所以我上传了图片来可视化它: Grey-scale images visualisation 这些位图在颜色转换为一种颜色 space 组件后显示:B、G、R、S(蓝色、绿色红色、饱和度)。我想在 Android 中重复一遍。我试过这样的事情:

case 'blue': pixels[i]=Color.argb(alpha,0,0,blue);

但它根本不起作用。如何删除不需要的组件并以灰度显示具有一种颜色 space 组件值的位图?

您将无法使用 ColorMatrixColorFilter 来显示饱和度,因为无法将公式转换为矩阵,并且对所有分量使用相同的技术可能比将其作为特殊处理更容易案例.

您包含的代码将生成蓝色位图,要以灰度显示蓝色分量,您还需要将其复制到红色和绿色通道:

case 'blue': pixels[i]=Color.argb(alpha,blue,blue,blue);

同样适用于红色:

case 'red': pixels[i]=Color.argb(alpha,red,red,red);

和绿色:

case 'green': pixels[i]=Color.argb(alpha,green,green,green);

对于饱和度,您需要计算它。这是一个公式:

case 'saturation':         
     int rgbMax = red > green ? (red > blue ? red : blue) : (green > blue ? green : blue);
     if(rgbMax == 0)
     {
         pixels[i]=Color.argb(alpha,0,0,0);
     }
     else
     {
         int rgbMin = red < green ? (red < blue ? red : blue) : (green < blue ? green : blue);
         int saturation = (255 * (rgbMax - rgbMin)) / rgbMax;
         pixels[i]=Color.argb(alpha,saturation,saturation,saturation);
     }

如果您对结果不满意,请参考formula for HSV