[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);
有谁知道问题是什么?
答案 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