“无效句柄”创建CGBitmapContext

时间:2012-04-12 06:21:04

标签: xamarin.ios cgbitmapcontext

我遇到了CGBitmapcontext的问题。 在使用消息“invalid Handle”创建CGBitmapContext时出错。

这是我的代码:

var previewContext = new CGBitmapContext(null, (int)ExportedImage.Size.Width, (int)ExportedImage.Size.Height, 8, (int)ExportedImage.Size.Height * 4,                                                    CGColorSpace.CreateDeviceRGB(), CGImageAlphaInfo.PremultipliedFirst);

谢谢;

2 个答案:

答案 0 :(得分:6)

这是因为您将null传递给第一个参数。 CGBitmapContext用于直接绘制到内存缓冲区中。构造函数的所有重载中的第一个参数是(Apple docs):

  

数据   指向要在其中呈现图形的内存中的目标的指针。此内存块的大小至少应为   (bytesPerRow * height)bytes。

在MonoTouch中,为方便起见,我们得到两个接受byte []的重载。所以你应该像这样使用它:

int bytesPerRow = (int)ExportedImage.Size.Width * 4; // note that bytes per row should 
    //be based on width, not height.
byte[] ctxBuffer = new byte[bytesPerRow * (int)ExportedImage.Size.Height];
var previewContext = 
    new CGBitmapContext(ctxBuffer, (int)ExportedImage.Size.Width, 
    (int)ExportedImage.Size.Height, 8, bytesPerRow, colorSpace, bitmapFlags);

答案 1 :(得分:0)

如果传递给方法的widthheight参数的值为0,也会发生这种情况。