WEB开发网
开发学院软件开发C语言 c#指针进行图像操作 阅读

c#指针进行图像操作

 2009-06-08 08:32:21 来源:WEB开发网   
核心提示:提及.NET的指针操作,很多人并不是很了解,c#指针进行图像操作,甚至还不知道有这么个东东由于C#的指针操作属于unsafe操作,所以很多人对unsafe使用起来都很谨慎其实所谓不安全代码,平时我们通过GDI+操作稍大点图片象素时,都会有一种濒临崩溃的感觉,其实是不受控于CLR控制下的托管执行,相当于CLR领导下的部分

提及.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();

1 2  下一页

Tags:指针 进行 图像

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接