【问题标题】:CGContextRef not being createdCGContextRef 没有被创建
【发布时间】:2023-03-07 18:55:01
【问题描述】:
-(CGImageRef)drawing{

CGContextRef    context;
GLubyte         *bitmapData;
size_t          width, height;

width=super.size.width;
height=super.size.height;

bitmapData = (GLubyte *) calloc(width * height * 4, sizeof(GLubyte));

context = CGBitmapContextCreate(bitmapData, width, height, 8, width * 4, CGColorSpaceCreateDeviceRGB(), kCGImageAlphaPremultipliedLast);

if (context==NULL){
    NSLog(@"context not created?!   (o_*) ");
}

free(bitmapData);


CGContextSetRGBFillColor (context, 1, 0, 0, 1);
CGContextFillRect (context, CGRectMake (0, 0, 200, 100 ));
CGContextSetRGBFillColor (context, 0, 0, 1, .5);
CGContextFillRect (context, CGRectMake (0, 0, 100, 200 ));




CGImageRef myImage = CGBitmapContextCreateImage (context);

CGContextRelease(context);

return myImage;

}

所以我尝试在上下文中渲染屏幕外的绘图,然后将其作为CGImageRef 获取,但由于某种原因,上下文始终为 NULL,并且当我读取图像输出时应用程序崩溃。

谁能解释一下这里发生了什么和/或指出一个可行的例子。

【问题讨论】:

  • 控制台有什么东西吗?可能会出现一条消息,说明尝试创建上下文时出了什么问题。
  • @rmaddy only CGContextSetRGBFillColor: invalid context 0x0 但应该存在,因为上下文为空。除此之外什么都没有......这就是让我困惑的地方
  • 尝试用CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB) 替换您的色彩空间。顺便说一句 - 你需要释放色彩空间。
  • widthheight 有多大?

标签: objective-c ios cocoa-touch core-graphics quartz-2d


【解决方案1】:

我不知道为什么上下文为空 - 宽度和高度可能不好。

但是……

  1. 在使用之前释放位图!
  2. 您无法释放您创建的色彩空间。

Quartz 2D 编程指南中有一个使用CGBitmapContextCreate 的示例。

【讨论】:

  • 实际上是宽度和高度..但出于愚蠢的原因。宽度和高度穿着 CGFloats,当我将它们传递给 CGBitmapContextCreate 时,它​​崩溃了..但是当我将类型转换为 int 时,它起作用了。如果您将 float 传递给 int,不应该将其读取为 int 吗?还是我的大学时光白费了?
猜你喜欢
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 2018-06-20
  • 1970-01-01
  • 1970-01-01
  • 2012-11-13
  • 2011-09-17
相关资源
最近更新 更多