使用quartz2d进行图像处理

时间:2012-02-17 05:51:26

标签: ios

CGSize cgs = CGSizeMake(250.0, 300.0);
    UIGraphicsBeginImageContext(cgs);    
    CGRect rectangle = CGRectMake(0,0,cgs.width,cgs.height);
    UIImage *myImage = [UIImage imageNamed:@"BMW.jpg"]; 

    [myImage drawInRect:rectangle];    
    [myImage release];

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetLineWidth(context, 5.0);
    CGContextSetRGBStrokeColor(context, 0.0, 0.0, 1.0, 1.0); 
    CGContextStrokeRect(context, rectangle);

    UIImage *testImg =  UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    [testImg drawAtPoint:CGPointMake(35, 10)];

我希望在绘制图像的图像和矩形边框之间留出间隙,例如在左上角5和右上角5但在底部大约30,因为它是用户将要写入的文本空间,用户也可以选择他/她想要文本在顶部,所以在这种情况下,顶部间隙将是30,底部间隙将是5.这是在drawrect方法中uiview的子类内部的代码。

使用此代码边框和图像紧密绑定在一起,我无法在边框和图像之间给出间隙。知道我该怎么办?

提前致谢。

enter image description here

1 个答案:

答案 0 :(得分:2)

首先,你有一个严重的错误。此行错误

[myImage release];

您不拥有myImage,因此您应该发布它。您需要阅读Cocoa Core Competencies中的“内存管理规则”。或者您应该打开ARC(自动引用计数),然后编译器将负责为您发布内容。由于自iOS 4.0以来支持ARC,因此如果您正在开发新的应用程序,几乎可以肯定使用它。

关于图像绘制,您只需要修改绘制图像的矩形。例如,您可以在顶部,左侧和右侧留下5像素边框,在底部留下30点边框,如下所示:

CGRect imageRect = CGRectInset(rectangle, 5, 5);  // move 5 points in on all sides
imageRect.size.height -= 25;  // make it another 25 points shorter
[myImage drawInRect:imageRect];

如果您希望将30点边框置于顶部,则还需要修改imageRect.origin.y