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 ピクセル大きい白いキャンバスを最初に描画し、その上にその画像を描画する方法を誰か教えてもらえますか?

4

1 に答える 1

15

コードを調整して機能させました。基本的にそれは何をします:

  1. キャンバスのサイズを画像のサイズ + 2*margins に設定します
  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;
}
于 2012-06-05T09:57:02.847 に答える