使用CopyPIxels方法时,“输入数组不是有效等级”错误消息

时间:2010-08-05 19:36:41

标签: c#

[StructLayout(LayoutKind.Sequential)]
public struct PixelColor
{
 public byte Blue;
 public byte Green;
 public byte Red;
 public byte Alpha;
}

public PixelColor[,] GetPixels(BitmapSource source)
{
 if(source.PixelFormat!=PixelFormats.Bgra32)
 source = new FormatConvertedBitmap(source, PixelFormats.Bgra32, null, 0);

 int width = source.PixelWidth;
 int height = source.PixelHeight;
 PixelColor[,] result = new PixelColor[width, height];

 source.CopyPixels(result, width * 4, 0);
 return pixels;
}

我在此行Input array is not a valid rank. Parameter name: pixels

上收到此错误消息source.CopyPixels(result, width * 4, 0);

有谁知道问题是什么?

1 个答案:

答案 0 :(得分:2)

BitmapSource.CopyPixels期望一维数组作为第一个参数。你传给它一个二维数组。

而不是实际提供“矩形”位数组,CopyPixels显然给你一个连续的数组 - “stride”指定位图的一条扫描线的宽度,这意味着 - 如果我理解正确 - 那给定 n 位的步幅,位图的第二行从位 n + 1开始

有关步幅的解释,请参阅此链接:http://www.tech-archive.net/Archive/DotNet/microsoft.public.dotnet.framework.drawing/2006-09/msg00057.html