我有一个视图与uiimageview我通过相机分配这个uiimageview图像..现在我想做一些绘图到图像....使用coregraphics.i希望做这样的事情...通过触摸和选择一个区域当线加入像圆或任何形状的东西时绘制线。我想将那个特定区域更改为其他东西,例如更改颜色。将其转换为灰度..直到现在我能画线...这里是一个在uiimage视图上绘制的线条图像......
但我无法弄明白我如何在imageview的图像中绘制..如何修改imageview的图像???
我也希望在点击清除按钮或类似撤消之类的情况下恢复图像。有人知道如何实现这一目标吗?
和
如何在单击裁剪按钮时创建矩形在屏幕上的任何位置移动矩形...然后按按钮裁剪图像...然后保存裁剪的图像..
答案 0 :(得分:9)
以下是步骤:
这是一个获取图像的方法,在它上面绘制一些东西并返回一个带有修改内容的新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;
}
要恢复旧图像,只需保留对它的引用。
裁剪的事情与上述内容无关,你应该为此创建一个新问题。
答案 1 :(得分: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;
}
答案 2 :(得分:0)
请查看Overview of Quartz 2D,了解有关在iPhone上使用Quartz 2D的信息。