qul*_*zam 1 c# pointers unsafe visual-studio-2008
我发现网上的代码我无法理解这一行: -
byte* p = (byte*)(void*)Scan0;
Run Code Online (Sandbox Code Playgroud)
Scan0是System.IntPtr. 它是C#.Net的代码.Plz解释上述内容.
完整的代码如下.这是用于转换灰度图像的代码.
public static Image GrayScale(Bitmap b)
{
BitmapData bmData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
int stride = bmData.Stride;
System.IntPtr Scan0 = bmData.Scan0;
unsafe
{
byte* p = (byte*)(void*)Scan0;
int nOffset = stride - b.Width * 3;
byte red, green, blue;
for (int y = 0; y < b.Height; ++y)
{
for (int x = 0; x < b.Width; ++x)
{
blue = p[0];
green = p[1];
red = p[2];
p[0] = p[1] = p[2] = (byte)(.299 * red + .587 * green + .114 * blue);
p += 3;
}
p += nOffset;
}
}
b.UnlockBits(bmData);
return (Image)b;
}
Run Code Online (Sandbox Code Playgroud)
我理解所有的代码,但只有这一行的问题.
byte* p = (byte*)(void*)Scan0;
Run Code Online (Sandbox Code Playgroud)
首先将其转换IntPtr为void指针.然后到byte指针.这是unsafe代码.
有关不安全代码的更多信息:http: //msdn.microsoft.com/en-us/library/aa288474%28VS.71%29.aspx
正如Robert Harvey所说,指针是一个记忆位置.在C/C++中,数组与此概念密切相关.当它做方括号时,它基本上是调整地址.
| 归档时间: |
|
| 查看次数: |
3028 次 |
| 最近记录: |