在一个白色画布上,使用CoreGraphics绘制一张图片。

6

我有一张宽高可变的源图片,必须在全屏iPad UIImageView上显示,但要在图像周围添加边框。因此,我的任务是创建一个带有白色边框的新图像,但不重叠在图像本身上。目前我正在使用以下代码通过重叠来完成:

- (UIImage*)imageWithBorderFromImage:(UIImage*)source
{
  CGSize size = [source size];
  UIGraphicsBeginImageContext(size);
  CGRect rect = CGRectMake(0, 0, size.width, size.height);
  [source drawInRect:rect blendMode:kCGBlendModeNormal alpha:1.0];

  CGContextRef context = UIGraphicsGetCurrentContext();
  CGContextSetRGBStrokeColor(context, 1.0, 1.0, 1.0, 1.0);
  CGContextSetLineWidth(context, 40.0);
  CGContextStrokeRect(context, rect);
  UIImage *testImg =  UIGraphicsGetImageFromCurrentImageContext();
  UIGraphicsEndImageContext();
  return testImg;
}

有没有人能告诉我如何首先绘制一个白色画布,其在每个方向上比源图像大40个像素,然后在上面绘制该图像?

1个回答

15

我修改了你的代码使其能够工作。基本上它所做的是:

  1. 将画布大小设置为图像大小+2个边距
  2. 用背景颜色(在你的情况下为白色)填充整个画布
  3. 在适当的矩形中绘制你的图像(具有初始大小和所需边距)

得到的代码如下:

- (UIImage*)imageWithBorderFromImage:(UIImage*)source
{
    const CGFloat margin = 40.0f;
    CGSize size = CGSizeMake([source size].width + 2*margin, [source size].height + 2*margin);
    UIGraphicsBeginImageContext(size);

    [[UIColor whiteColor] setFill];
    [[UIBezierPath bezierPathWithRect:CGRectMake(0, 0, size.width, size.height)] fill];

    CGRect rect = CGRectMake(margin, margin, size.width-2*margin, size.height-2*margin);
    [source drawInRect:rect blendMode:kCGBlendModeNormal alpha:1.0];

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接