我有一个视图与uiimageview我通过相机分配这个uiimageview图像..现在我想做一些绘图到图像....使用coregraphics.i希望做这样的事情...通过触摸和选择一个区域当线加入像圆或任何形状的东西时绘制线。我想将那个特定区域更改为其他东西,例如更改颜色。将其转换为灰度..直到现在我能画线...这里是一个在uiimage视图上绘制的线条图像......

但我无法弄明白我如何在imageview的图像中绘制..如何修改imageview的图像???

我也希望在点击清除按钮或类似撤消之类的情况下恢复图像。有人知道如何实现这一目标吗?

如何在单击裁剪按钮时创建矩形在屏幕上的任何位置移动矩形...然后按按钮裁剪图像...然后保存裁剪的图像..

有帮助吗?

解决方案

以下是步骤:

  1. 创建与图像的色彩空间和尺寸匹配的CGBitmapContext。
  2. 将图像绘制到该上下文中。
  3. 在图像上绘制您想要的任何内容。
  4. 从上下文创建新图像。
  5. 处理上下文。
  6. 这是一个获取图像的方法,在它上面绘制一些东西并返回一个带有修改内容的新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;
}

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top