c#指针进行图像操作
2009-06-08 08:32:21 来源:WEB开发网提及.NET的指针操作,很多人并不是很了解,甚至还不知道有这么个东东
由于C#的指针操作属于unsafe操作,所以很多人对unsafe使用起来都很谨慎
其实所谓不安全代码,其实是不受控于CLR控制下的托管执行,相当于CLR领导下的部分区域自治,
当然CLR也不会去关心不安全代码的内存分配和回收
费话少说,先体验一下适当的指针操作带来的性能提升。
平时我们通过GDI+操作稍大点图片象素时,都会有一种濒临崩溃的感觉,我们转下用指针操作
1 Bitmap map = new Bitmap(path);
2 // 将图片位图区域进行锁定
3 BitmapData mapdata = map.LockBits(new Rectangle(0, 0, map.Width, map.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
4 unsafe
5 {
6 byte* pixpoint;
7 int newpoint;
8
9 for (int i = 0; i < map.Width; i++)
10 {
11 for (int j = 0; j < map.Height; j++)
12 {
13 // 位图结构存在一个字节对齐问题。
14 pixpoint = (byte*)mapdata.Scan0; +i * 3 + j * mapdata.Stride;
15 newpoint = (*pixpoint * 11 + *(pixpoint + 1) * 59 + *(pixpoint + 2) * 30) / 100;
16 *(pixpoint++) = (byte)newpoint;
17 *(pixpoint++) = (byte)newpoint;
18 *(pixpoint++) = (byte)newpoint;
19
20 // 非指针操作
21 // Color pxcl=map.GetPixel(i, j);
22 // map.SetPixel(i, j, (pxcl.R * 11 + pxcl.G * 59 + pxcl * 30) / 100);
23 }
24 }
25 }
26 // 将位图内存区域进行解锁
27 map.UnlockBits(mapdata);
28 map.Dispose();
更多精彩
赞助商链接