/// <summary>
/// 获取黑白图像
/// </summary>
/// <returns>黑白图像</returns>
public Bitmap GetDarkImage(Bitmap headImage) {
Bitmap b = new Bitmap(headImage);
Bitmap bmp = b.Clone(new Rectangle(0, 0, headImage.Width, headImage.Height), PixelFormat.Format24bppRgb);
b.Dispose();
BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, bmp.PixelFormat);
byte[] byColorInfo = new byte[bmp.Height * bmpData.Stride];
Marshal.Copy(bmpData.Scan0, byColorInfo, 0, byColorInfo.Length);
for (int x = 0, xLen = bmp.Width; x < xLen; x++) {
for (int y = 0, yLen = bmp.Height; y < yLen; y++) {
byColorInfo[y * bmpData.Stride + x * 3] =
byColorInfo[y * bmpData.Stride + x * 3 + 1] =
byColorInfo[y * bmpData.Stride + x * 3 + 2] =
GetAvg(
byColorInfo[y * bmpData.Stride + x * 3],
byColorInfo[y * bmpData.Stride + x * 3 + 1],
byColorInfo[y * bmpData.Stride + x * 3 + 2]);
}
}
Marshal.Copy(byColorInfo, 0, bmpData.Scan0, byColorInfo.Length);
bmp.UnlockBits(bmpData);
return bmp;
}
private byte GetAvg(byte b, byte g, byte r) {
return (byte)((r + g + b) / 3);
}