【C#】【WriteableBitmap】24色位图转8位灰度图像处理

/// <summary>
/// ConvertBitmap24To8 process.
/// 24色位图转8位灰度图像处理
/// </summary>
/// <param name="src">Source image.</param>
/// <returns></returns>
public static WriteableBitmap ConvertBitmap24To8(WriteableBitmap src)
{
    if (src != null)
    {
        int w = src.PixelWidth;
        int h = src.PixelHeight;
        WriteableBitmap binaryImage = new WriteableBitmap(w, h, 96.0, 96.0, PixelFormats.Gray8, null);
        PixelColor[,] PixelData = CopyPixels(src, out int stride);
        byte[,] gray8Data = new byte[h, w];
        stride = w;

        for (int i = 0; i < PixelData.GetLength(0); i++)
        {
            for (int j = 0; j < PixelData.GetLength(1); j++)
            {
                int gray = (int)(0.299 * PixelData[i, j].Red + 0.587 * PixelData[i, j].Green + 0.114 * PixelData[i, j].Blue);
                gray8Data[i, j] = (byte)gray;
            }
        }

        binaryImage.WritePixels(new Int32Rect(0, 0, src.PixelWidth, src.PixelHeight), gray8Data, stride, 0);
        return binaryImage;
    }
    else
    {
        return null;
    }
}
posted @ 2024-05-20 11:32  qiutian-hao  阅读(30)  评论(0编辑  收藏  举报