5

私はuiimageviewでビューを持っています私はこのuiimageview画像をカメラで割り当てます..今私は画像にいくつかの描画をしたいです....coregraphicsを使用しています。私はこのようなことをしたいです...線は円や任意の形のようなものを結合します..私はその特定の領域を別のものに変更したいです。たとえば、そこで色を変更します。それをグレースケールに変換します..今まで私は線を描くことができます...これは線の画像ですuiimageビュー上に描画...

代替テキスト

しかし、imageviewの画像をどのように描画するのか理解できません。imageviewの画像を変更する方法を意味しますか?

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

切り抜きボタンをクリックしたときに長方形を作成するにはどうすればよいですか?画面上の任意の場所に長方形を移動します...次にボタンを押して画像を切り抜きます...そして切り抜いた画像を保存します。

4

3 に答える 3

9

手順は次のとおりです。

  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;
}

古いイメージに復元するには、それへの参照を保持するだけです。

トリミングは上記とは関係ありません。そのための新しい質問を作成する必要があります。

于 2009-09-26T09:23:31.990 に答える
1

はるかに簡単な解決策は

(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;
}
于 2013-05-16T21:55:47.330 に答える
0

iPhone で Quartz 2D を使用する方法については、「Quartz 2D の概要」を参照してください。

于 2009-09-25T01:42:42.740 に答える