CGBitmapContext构造函数中的参数无效

问题描述:

我试图在使用CGBitmapContext constructor(s)的Xamarin.iOS项目中创建一个空白位图。但是,不管我怎么努力我刚刚得到的错误"System.Exception: Invalid parameters to context creation"CGBitmapContext构造函数中的参数无效

示例代码:

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作为第一个参数,以便系统分配数据。我在最后一个参数中尝试了各种标志。我总是得到同样的错误。什么参数错误?在上面的代码中需要更改哪些内容才能使其执行?

我将最后一个参数从CGBitmapFlags.ByteOrderDefault更改为CGBitmapFlags.PremultipliedLast,错误消失。

CGBitmapFlags Enumeration

作为链接所述

该枚举规定了位图的组件数据中的布局信息。

此枚举确定数据的内存中组织结构,并包括颜色模型,是否存在alpha通道以及组件值是否已预乘。

我想我们必须选择相应的标志来匹配数据信息,特别是颜色模型。

出于同样的原因,如果您选择CreateDeviceCmyk,CGBitmapFlags.None将是适当的。

+0

谢谢,这确实有效。我没有意识到ColorSpace确定了字节的排列 –