我正在尝试使用CGBitmapContext constructor(s)在Xamarin.iOS项目中创建一个空白位图。但是,无论我尝试什么,我都会收到错误"System.Exception: Invalid parameters to context creation"
示例代码:
const int width = 100;
const int height = 100;
const int bytesPerPixel = 4;
const int bitsPerComponent = 8;
var intBytes = width * height * bytesPerPixel;
byte[] pixelData = new byte[intBytes];
var colourSpace = CGColorSpace.CreateDeviceRGB();
using (var objContext = new CGBitmapContext(pixelData, width, height, bitsPerComponent, width * bytesPerPixel, colourSpace, CGBitmapFlags.ByteOrderDefault))
{
// ...
}
我试过改变大部分参数;我尝试修复数据块并将其作为IntPtr传递。我尝试使用null作为第一个参数,以便系统分配数据。我在最后一个参数中尝试了各种标志。我总是得到同样的错误。什么参数错了?在上面的代码中需要更改什么才能使其执行?
答案 0 :(得分:1)
我将最后一个参数从CGBitmapFlags.ByteOrderDefault
更改为CGBitmapFlags.PremultipliedLast
,错误消失了。
正如链接所说
此枚举指定位图中组件数据的布局信息。
此枚举确定数据的内存组织,并包括颜色模型,是否存在Alpha通道以及组件值是否已预乘。
我认为我们必须选择相应的标志来匹配数据信息,尤其是颜色模型。
出于同样的原因,如果您选择 CreateDeviceCmyk ,CGBitmapFlags.None
将是合适的。