您好我尝试在我的项目中使用一些代码,错误上升到语法,我不知道它是什么。 错误来自以“不安全”开头的标签。
什么是不安全的,在哪里以及为什么要使用它? tnx朋友......
代码在这里:
public Bitmap Cursor(ref int cursorX, ref int cursorY)
{
int screenWidth = 1;
int screenHeight = 1;
lock (_newBitmap)
{
try
{
screenWidth = _newBitmap.Width;
screenHeight = _newBitmap.Height;
}
catch (Exception)
{
...
}
}
if (screenWidth == 1 && screenHeight == 1)
{
return null;
}
Bitmap img = CaptureScreen.CaptureCursor(ref cursorX, ref cursorY);
if (img != null && cursorX < screenWidth && cursorY < screenHeight)
{
int width = img.Width;
int height = img.Height;
BitmapData imgData = img.LockBits(
new Rectangle(0, 0, width, height),
ImageLockMode.ReadOnly, img.PixelFormat);
const int numBytesPerPixel = 4;
int stride = imgData.Stride;
IntPtr scan0 = imgData.Scan0;
unsafe // ERROR IN THIS LINE
// IF i move unsafe to method header (unsafe public .... ) i get some another errors
{
byte* pByte = (byte*)(void*)scan0;
for (int h = 0; h < height; h++)
{
for (int w = 0; w < width; w++)
{
int offset = h * stride + w * numBytesPerPixel + 3;
if (*(pByte + offset) == 0)
{
*(pByte + offset) = 60;
}
}
}
}
img.UnlockBits(imgData);
return img;
}
return null;
}
答案 0 :(得分:2)
http://msdn.microsoft.com/en-us/library/chfa2zb8.aspx
unsafe
关键字允许C#代码操作指针。请注意,您必须设置项目设置以允许编译器编译不安全的代码;我认为这是/unsafe
选项。
您的代码通过直接访问内存中的位图来操作位图位。根据我的经验,这是{#1}}在C#中最常见的用途之一。涉及Bitmap.SetPixel的替代方案要慢得多。
答案 1 :(得分:1)
unsafe允许您使用指针进行原始内存操作。要编译不安全的代码,您需要告诉您的项目允许不安全的代码。右键单击项目并单击构建,然后找到允许不安全代码复选框。
答案 2 :(得分:1)
我不知道您为什么要使用不安全的代码,但是为了使用此代码,您必须首先在项目构建配置中选中“允许不安全”。