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