2009-09-17 4 views
5

У меня есть представление с uiimageview. Я назначаю это изображение uiimageview камерой. Теперь я хочу сделать рисунок на изображении .... используя coregraphics.i хочу сделать что-то вроде этого ... выберите область, коснувшись и рисуя line, когда строка объединяет что-то вроде круга или любой формы. Я хочу изменить эту конкретную область на что-то еще, например, изменить цвет там. Покажите это в оттенках серого .. до сих пор я могу рисовать линию ... вот изображение линии, проведенной по мнению UIImage ...Как создать новое изображение, используя поверх существующего с помощью Quartz?

alt text http://i29.tinypic.com/x5quc6.png

, но я не в состоянии понять это как я рисую на image..mean ImageView в том, как изменить образ ImageView в ???

также я хочу восстановить изображение при нажатии кнопки очистки или что-то вроде отмены ... кто-то знает, как этого достичь?

и

Как создать прямоугольник, когда нажмите на кнопку растениеводстве перемещать прямоугольник в любом месте на экране ... а затем нажать на кнопку, чтобы обрезать изображение ..., а затем сохранить обрезанное изображение ..

ответ

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

Чтобы восстановить старый образ, просто сохранить ссылку на него.

Объект обрезки не имеет отношения к вышесказанному, и вы должны создать для него новый вопрос.

+0

хорошо ваш код работает great.now скажите мне, когда я использовать кварц для рисования линии, почему медленно на самом устройстве. Также расскажите мне, как превратить изображение в оттенки серого. –

+1

Ваши другие вопросы должны быть опубликованы как новые вопросы. –

+0

Хорошо, я получил его, чтобы превратить его в серое. Теперь есть способ, которым я могу превратить изображение во что-то другое. В приведенном выше изображении выбор, такой как круг, есть. Я имею в виду любой путь –

0

Посмотрите на Overview of Quartz 2D информацию об использовании Quartz 2D на iPhone.

+0

я прочитал это, но до сих пор не в состоянии сделать that.it очень сложным –

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