【问题标题】:Invalid parameters in CGBitmapContext constructorCGBitmapContext 构造函数中的参数无效
【发布时间】:2017-09-17 12:39:44
【问题描述】:

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

【问题讨论】:

    标签: xamarin.ios cgbitmapcontext


    【解决方案1】:

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

    参考CGBitmapFlags Enumeration

    正如链接所说

    此枚举指定位图中组件数据的布局信息。

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

    我认为我们必须选择相应的标志来匹配数据信息,尤其是颜色模型。

    出于同样的原因,如果您选择 CreateDeviceCmykCGBitmapFlags.None 将是合适的。

    【讨论】:

    • 谢谢,确实有效。我没有意识到 ColorSpace 决定了字节的排列
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-15
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多