使用 CopyPIxels 方法时出现“输入数组不是有效排名”错误消息 [关闭]

2024-01-04

[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);

有谁知道问题是什么?


BitmapSource.CopyPixels 需要一个一维数组作为第一个参数。您向其传递一个二维数组。

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 CopyPIxels 方法时出现“输入数组不是有效排名”错误消息 [关闭] 的相关文章

随机推荐