3

创建后如何增加 CGContextRef 的大小。

if(UIGraphicsBeginImageContextWithOptions != NULL) {
    UIGraphicsBeginImageContextWithOptions(CGSizeMake(width, height), NO, 0);
}
else {
    UIGraphicsBeginImageContext(CGSizeMake(width, height));
}
CGContextRef ctr = UIGraphicsGetCurrentContext();

我可以更改 ctr 的大小吗?

4

2 回答 2

1

尝试在没有 if-else 条件的情况下执行此操作。仅使用最后一行代码创建 CGContext。

这是一个简单的例子

- (void)drawRect:(CGRect)rect
{
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);
    CGContextSetLineWidth(context, 2.0);
    CGContextMoveToPoint(context, 100,100);
    CGContextAddLineToPoint(context, 200, 200);
    CGContextStrokePath(context);
}
于 2012-10-12T07:21:55.893 回答
0

我遇到了和你一样的问题。我开发了一个函数来调整 CGContext 的大小:

void MPResizeContextWithNewSize(CGContextRef *c, CGSize s) {
    size_t bitsPerComponents = CGBitmapContextGetBitsPerComponent(*c);
    size_t numberOfComponents = CGBitmapContextGetBitsPerPixel(*c) / bitsPerComponents;
    CGContextRef newContext = CGBitmapContextCreate(NULL, s.width, s.height, bitsPerComponents, sizeof(UInt8)*s.width*numberOfComponents,
                                                    CGBitmapContextGetColorSpace(*c), CGBitmapContextGetBitmapInfo(*c));
    // Copying context content
    CGImageRef im = CGBitmapContextCreateImage(*c);
    CGContextDrawImage(newContext, CGRectMake(0, 0, CGBitmapContextGetWidth(*c), CGBitmapContextGetHeight(*c)), im);
    CGImageRelease(im);

    CGContextRelease(*c);
    *c = newContext;
}

我不知道它是否适用于UIGraphicsBeginImageContext(...)函数提供的上下文,但是如果您使用 手动创建上下文CGBitmapContextCreate,它将起作用。

希望在您询问后的时间后有所帮助...

于 2013-03-26T13:10:47.153 回答