private
static
Bitmap PBinary(Bitmap src,
int
v)
{
int
w = src.Width;
int
h = src.Height;
Bitmap dstBitmap =
new
Bitmap(src.Width ,src.Height ,System .Drawing .Imaging .PixelFormat .Format24bppRgb );
System.Drawing.Imaging.BitmapData srcData = src.LockBits(
new
Rectangle(0, 0, w, h), System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
System.Drawing.Imaging.BitmapData dstData = dstBitmap.LockBits(
new
Rectangle(0, 0, w, h), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
unsafe
{
byte
* pIn = (
byte
*)srcData.Scan0.ToPointer();
byte
* pOut = (
byte
*)dstData.Scan0.ToPointer();
byte
* p;
int
stride = srcData.Stride;
int
r, g, b;
for
(
int
y = 0; y < h; y++)
{
for
(
int
x = 0; x < w; x++)
{
p = pIn;
r = p[2];
g = p[1];
b = p[0];
pOut [0]=pOut [1]=pOut [2]=(
byte
)(((
byte
)(0.2125 * r + 0.7154 * g + 0.0721 * b) >= v)
? 255 : 0);
pIn += 3;
pOut += 3;
}
pIn += srcData.Stride - w * 3;
pOut += srcData.Stride - w * 3;
}
src.UnlockBits(srcData );
dstBitmap.UnlockBits(dstData );
return
dstBitmap;
}
}