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

查看Quartz 2D 概述,了解在 iPhone 上使用 Quartz 2D 的信息。

于 2009-09-25T01:42:42.740 回答