/// <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;
}
}