如何更改CGContextRef的大小

时间:2012-10-12 07:18:29

标签: iphone objective-c ios core-graphics

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

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

我可以更改ctr的大小吗?

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分: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手动创建上下文,则可以使用。

希望自从你提出要求后有所帮助...