Quartzを使用して既存の画像の上に描画して新しい画像を作成するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/1437883

質問

i uiimageviewのビューがあり、このuiimageview画像をカメラで割り当てます。今度は画像に描画を行います。...coregraphicsを使用します。このようなことをしたい...をタッチして領域を選択します。線が円や形のようなものにつながったときに線を引く。たとえば、その特定の領域を別の何かに変更したい、たとえばそこの色を変更したい。それをグレースケールに変える.. uiimageビュー上に描画された線の画像...

 alt text

しかし、私はimageviewの画像にどのように描画するのか理解できません。

クリアボタンまたは元に戻すなどのボタンをクリックしたときに画像を復元したい..これを達成する方法を誰かが知っていますか?

and

切り取りボタンをクリックして四角形を作成するには、画面上の任意の場所に四角形を移動し、ボタンを押して画像を切り取ってから、切り取った画像を保存します。

役に立ちましたか?

解決

手順は次のとおりです。

  1. 画像の色空間と寸法に一致するCGBitmapContextを作成します。
  2. 画像をそのコンテキストに描画します。
  3. 画像の上に好きなものを描画します。
  4. コンテキストから新しい画像を作成します。
  5. コンテキストから破棄します。

画像を取得し、その上に何かを描画し、内容が変更された新しいUIImageを返すメソッドを次に示します。

- (UIImage*)modifiedImageWithImage:(UIImage*)uiImage
{
    // build context to draw in
    CGImageRef image = uiImage.CGImage;
    CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB();
    CGContextRef ctx = CGBitmapContextCreate(NULL,
                                             CGImageGetWidth(image), CGImageGetHeight(image),
                                             8, CGImageGetWidth(image) * 4,
                                             colorspace, kCGImageAlphaPremultipliedLast);
    CGColorSpaceRelease(colorspace);

    // draw original image
    CGRect r = CGRectMake(0, 0, CGImageGetWidth(image), CGImageGetHeight(image));
    CGContextSetBlendMode(ctx, kCGBlendModeCopy);
    CGContextDrawImage(ctx, r, image);
    CGContextSetBlendMode(ctx, kCGBlendModeNormal);

    // draw something
    CGContextAddEllipseInRect(ctx, CGRectInset(r, 10, 10));
    CGContextSetRGBStrokeColor(ctx, 1.0f, 1.0f, 1.0f, 0.5f);
    CGContextSetLineWidth(ctx, 16.0f);
    CGContextDrawPath(ctx, kCGPathStroke);

    CGContextAddEllipseInRect(ctx, CGRectInset(r, 10, 10));
    CGContextSetRGBStrokeColor(ctx, 0.7f, 0.0f, 0.0f, 1.0f);
    CGContextSetLineWidth(ctx, 4.0f);
    CGContextDrawPath(ctx, kCGPathStroke);

    // create resulting image
    image = CGBitmapContextCreateImage(ctx);
    UIImage* newImage = [[[UIImage alloc] initWithCGImage:image] autorelease];
    CGImageRelease(image);
    CGContextRelease(ctx);

    return newImage;
}

古いイメージに復元するには、その参照を保持します。

切り抜きは上記とは関係ないため、新しい質問を作成する必要があります。

他のヒント

はるかに簡単な解決策は

(UIImage *) modifyImage:(UIImage *)inputImage
{
   UIGraphicsBeginImageContext(inputImage.size);
   [inputImage drawInRect:CGRectMake(0, 0, inputImage.size.width, inputImage.size.height);
   CGContextRef ctx = UIGraphicsGetCurrentContext();
   //Drawing code using above context goes here
   /*
    *
    */
   UIImage *outputImage = UIGraphicsGetImageFromCurrentImageContext();
   UIGraphicsEndImageContext();
   return outputImage;
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top