C# 用指针法将 灰度图转二维数组。 100
C#用指针法将灰度图转二维数组。要求:1.用指针法;2.不要讲思路,思路我都会,我就是老失败,求一份完整可用的代码;3.事成之后再答谢100金币。谢谢各位大神了。...
C# 用指针法将 灰度图转二维数组。要求: 1.用指针法;2.不要讲思路,思路我都会,我就是老失败,求一份完整可用的代码;3.事成之后再答谢100金币。
谢谢各位大神了。 展开
谢谢各位大神了。 展开
1个回答
展开全部
是类似这样的吗?
//还原
private void Save(byte[,] arr, PixelFormat pf, string desFile)
{
if (System.IO.File.Exists(desFile))
System.IO.File.Delete(desFile);
int height = arr.GetLength(0);
int width = arr.GetLength(1);
using (Bitmap g = new Bitmap(width, height, pf))
{
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
{
g.SetPixel(j, i, Color.FromArgb(arr[i, j], arr[i, j], arr[i, j]));
}
}
g.Save(desFile);
}
}
//Set unsafe
//读取
private unsafe byte[,] ToArray(string file)
{
using (Bitmap g = new Bitmap(file))
{
byte[,] a = new byte[g.Height, g.Width];
BitmapData bd = g.LockBits(new Rectangle(0, 0, g.Width, g.Height), ImageLockMode.ReadOnly, g.PixelFormat);
byte* p = (byte*)bd.Scan0.ToPointer();
int bytes = 3;
switch (g.PixelFormat)
{
case PixelFormat.Format32bppArgb:
case PixelFormat.Format32bppPArgb:
case PixelFormat.Format32bppRgb:
bytes = 4;
break;
}
for (int i = 0; i < a.GetLength(0); i++)
{
for (int j = 0; j < a.GetLength(1); j++)
{
//灰度图片RGB值一样的
a[i, j] = p[0];
p += bytes;
}
p += bd.Stride - bd.Width * bytes;
}
g.UnlockBits(bd);
return a;
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询