我们最近在 SO 上有几个线程(如下),其中一个常见的建议是不要使用指针。
在 .NET 中,使用指针作为函数参数或使用“ref”关键字有什么区别吗?
我最近需要将位图图像白色背景转换为透明。我试过了,我能想到的最优化的实现如下。
public unsafe Bitmap MakeWhiteAreaTransparent(Bitmap source)
{
Bitmap bitmap = new Bitmap(source.Width, source.Height, PixelFormat.Format32bppArgb);
BitmapData bitmapdata = source.LockBits(new Rectangle(0, 0, source.Width, source.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
BitmapData data2 = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb);
int* numPtr = (int*)bitmapdata.Scan0;
int* numPtr2 = numPtr + (bitmapdata.Width * bitmapdata.Height);
int* numPtr3 = (int*)data2.Scan0;
int num = Color.FromArgb(1, Color.White).ToArgb();
while (numPtr < numPtr2)
{
numPtr++;
Color color = Color.FromArgb(numPtr[0]);
if (((color.R < 200) || (color.G < 200)) || (color.B < 200))
{
numPtr3[0] = color.ToArgb();
}
else
{
numPtr3[0] = num;
}
numPtr3++;
}
source.UnlockBits(bitmapdata);
bitmap.UnlockBits(data2);
return bitmap;
}
我想知道我在起诉指针方面是否正确,或者我应该使用字节数组和 System.Runtime.InteropServices.Marshal.Copy 而不是用指针到处乱搞???