这个用了指针去处理图像,实在太多了我只解释重要的部分吧。
public int[,] Binary_L(double value){
Rectangle rect = new Rectangle(0, 0, curBitmap.Width, curBitmap.Height);
//表示图像大小的矩形
System.Drawing.Imaging.BitmapData bmpData = curBitmap.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, curBitmap.PixelFormat);
//载入内存,在内存进行图片处理
pic = new int[bmpData.Width, bmpData.Height];
//定义数组
unsafe //必须加unsafe才能在C#使用指针
{
byte* ptr = (byte*)(bmpData.Scan0); //获取指向在内存的所有像素的指针,以byte回值
for (int i = 0; i < bmpData.Height; i++) //遍历像素
{
for (int j = 0; j < bmpData.Width; j++)
{
//算法
if (RGB2L(ptr[2], ptr[1], ptr[0]) < value)
{
pic[j, i] = 1;
}
else
{
pic[j, i] = 0;
}
ptr += 3;
}
//指针的推加
ptr += bmpData.Stride - bmpData.Width * 3;
}
}
//解锁图片在内存里缓存以释放内存
curBitmap.UnlockBits(bmpData);
//返回先前定义的数组
return pic;