C#允许通过不安全指针实现像C++一样操作指针,这个速度是最快的。下面这个例子是修改一幅RGB图像的每个像素值,速度很快,测试一张2592*1944的彩色图像,只需要几ms就能够全部遍历。
/// <summary>
/// 操作彩色图像
/// </summary>
/// <param name="bitmap"></param>
private void GetRBBytes(Bitmap bitmap)
{
if (bitmap != null)
{
int width = bitmap.Width;
int height = bitmap.Height;
int length = height \* 3 \* width;
BitmapData data = bitmap.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);//将图像放入内存
System.IntPtr Scan0 = data.Scan0;//获取指针头
int stride = data.Stride;//获取图像跨距宽度
int Tempcount = 0;
unsafe
{
byte\* p = (byte\*)Scan0;//获取首个图像像素的地址
int offset = stride - width \* 3;
for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
p\[0\] = (byte)20;//B
p\[1\] = (byte)73;//G
p\[2\] = (byte)100;//R
}
p += offset;
}
count = Tempcount;
}
bitmap.UnlockBits(data);
this.pb\_imageRgb.Image = bitmap;
}
}
手机扫一扫
移动阅读更方便
你可能感兴趣的文章