您的位置:首页 > 其它

使用指针把图片转换成二维数组

2011-06-22 15:02 281 查看
/// <summary>
/// 使用指针扫描图片,返回存放像素值的二维数组(高,宽)
/// </summary>
/// <param name="bmp">预处理图片</param>
/// <param name="grizzly">是否为灰色图片</param>
/// <returns>返回存放像素值的二维数组(高,宽)</returns>
public string[,] LeveScan(Bitmap bmp, bool grizzly)
{
//创建图像   (防止LockBits方法出错,多加了一步)
Bitmap bmNew = new Bitmap(bmp.Width, bmp.Height, PixelFormat.Format24bppRgb);
Graphics g = Graphics.FromImage(bmNew);
g.DrawImage(bmp, new Point(0, 0));
g.Dispose();
string[,] temp = new string[bmp.Height, bmp.Width];
//获取图像的BitmapData对像
BitmapData data = bmNew.LockBits(new Rectangle(0, 0, bmNew.Width, bmNew.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
//循环处理
unsafe
{
byte* ptr = (byte*)(data.Scan0);
for (int i = 0; i < data.Height; i++)
{
for (int j = 0; j < data.Width; j++)
{
if (grizzly)
{
temp[i, j] = ptr[2].ToString(); //红
}
else
{
temp[i, j] = ptr[2].ToString() + "-"; //红
temp[i, j] += ptr[1].ToString() + "-"; //绿
temp[i, j] += ptr[0].ToString();  //蓝
}
ptr += 3;
}
ptr += data.Stride - data.Width * 3;
}
}
bmNew.UnlockBits(data);
return temp;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: