2016-05-21 15 views
1

私はこのように大まかに見てコアグラフィックスを使用してUIImageの中心に長方形を置くしようとしている:これは、これまでに私のコードですコアグラフィックスとUIImageで四角形を描画

enter image description here

func drawRectangleOnImage(image: UIImage) -> UIImage { 
    let imageSize = image.size 
    let scale: CGFloat = 0 
    UIGraphicsBeginImageContextWithOptions(imageSize, false, scale) 
    let context = UIGraphicsGetCurrentContext() 

    let rectangle = CGRect(x: 0, y: (imageSize.height/2) - 30, width: imageSize.width, height: 60) 

    CGContextSetFillColorWithColor(context, UIColor.blackColor().CGColor) 
    CGContextSetStrokeColorWithColor(context, UIColor.redColor().CGColor) 
    CGContextSetLineWidth(context, 5) 
    CGContextAddRect(context, rectangle) 
    CGContextDrawPath(context, .Fill) 

    let newImage = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 
    return newImage 
} 

私が送ったイメージの上に描画していないかのように感じます。新しいイメージを作成しています。全体が赤くなり、長方形が黒くなります。私は黒い矩形が残り、残りの部分はまだ画像と同じになるはずです。

私は間違っていますか?

+1

に答える私はコンテキストに画像を描画することは良いスタートになると仮定;) – Hamish

答えて

9

私が送った画像の上に描画していないかのように感じます。 新しい画像がすべて作成されています。

いいえ、気持ちは関係ありません。それは文字通りこのコードがしていることです。

  1. 新しいコンテキストを作成します
  2. は、コンテキストの外に画像を行い、ステップ1と2の間

それを返すことに四角形を描画し、あなたの元を描画する必要がありますイメージをコンテキストに追加します。

また、線の幅や線の色を設定する必要はありません。矩形を塗りつぶすのではなく、塗りつぶすのではないからです。 (あなたには、いくつかの理由で赤を見ている場合は、それがために、このコードではなかった。あなたが赤の背景を持っている別のビューやイメージを持っていますか?)

func drawRectangleOnImage(image: UIImage) -> UIImage { 
    let imageSize = image.size 
    let scale: CGFloat = 0 
    UIGraphicsBeginImageContextWithOptions(imageSize, false, scale) 
    let context = UIGraphicsGetCurrentContext() 

    image.drawAtPoint(CGPointZero) 

    let rectangle = CGRect(x: 0, y: (imageSize.height/2) - 30, width: imageSize.width, height: 60) 

    CGContextSetFillColorWithColor(context, UIColor.blackColor().CGColor) 
    CGContextAddRect(context, rectangle) 
    CGContextDrawPath(context, .Fill) 

    let newImage = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 
    return newImage 
} 

そして、あなたはさらにhigher-使用することによって簡素化することができ描画するためのレベルのUIKit APIです。

func drawRectangleOnImage(image: UIImage) -> UIImage { 
    let imageSize = image.size 
    let scale: CGFloat = 0 
    UIGraphicsBeginImageContextWithOptions(imageSize, false, scale) 

    image.drawAtPoint(CGPointZero) 

    let rectangle = CGRect(x: 0, y: (imageSize.height/2) - 30, width: imageSize.width, height: 60) 

    UIColor.blackColor().setFill() 
    UIRectFill(rectangle) 

    let newImage = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 
    return newImage 
} 
0

クルトRevisのObjective Cのバージョンは

-(UIImage *)drawRectangleOnImage:(UIImage *)img rect:(CGRect)rect{ 
     CGSize imgSize = img.size; 
     CGFloat scale = 0; 
     UIGraphicsBeginImageContextWithOptions(imgSize, NO, scale); 
     [img drawAtPoint:CGPointZero]; 
     [[UIColor greenColor] setFill]; 
     UIRectFill(rect); 
     UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); 
     UIGraphicsEndImageContext(); 
     return newImage; 
} 
関連する問題