仅以一个颜色空间分量值的灰度显示位图



我想知道如何以灰度显示彩色位图。必须为每个色彩空间组件分别执行此操作。可能不清楚,因此我上传了图像来可视化它:灰度图像可视化这些位图在颜色转换为一个颜色空间组件后显示:B、G、R、S(蓝色、绿色、红色、饱和度)。我想在安卓中重复一遍。我尝试了这样的事情:

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

但它根本不起作用。如何删除不必要的组件并以灰度呈现一个颜色空间组件值的位图?

您将无法使用 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);
     }

如果您对结果不满意,请参考HSV的公式。

最新更新