Pergunta

Eu tenho uma visão com uiimageview i atribuir esta imagem uiimageview por camera..now eu quero fazer algum desenho para imagem .... usando falta coregraphics.i fazer algo assim ... selecionar uma área tocando e desenho de linha quando a linha se junta algo como círculo ou qualquer shape..i quer mudar nessa área em particular para algo mais para there.turn cor exemplo mudança que em escala de cinza .. até agora eu sou capaz de chamar a linha ... aqui é um imagem da linha traçada sobre uma vista UIImage ...

text alt

mas eu sou incapaz de descobrir como é que eu tiro no image..mean do ImageView como modificar a imagem de ImageView ???

Também quero restaurar imagem ao clicar no botão Limpar ou algo parecido undo..does alguém sabe como conseguir isso?

e

Como faço para criar um retângulo quando clique no botão colheita mover o retângulo em qualquer lugar na tela ... e então apertar o botão para cortar a imagem ... e, em seguida, Salvar imagem recortada ..

Foi útil?

Solução

Estas são as etapas:

  1. Criar um CGBitmapContext correspondência de cores e dimensões da imagem.
  2. Desenhar a imagem em que contexto.
  3. Desenhe o que quiser na parte superior da imagem.
  4. Crie uma nova imagem a partir do contexto.
  5. Elimine fora do contexto.

Aqui está um método que leva uma imagem, desenha algo em cima dela e retorna uma nova UIImage com conteúdo modificado:

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

Para restaurar a velha imagem, basta manter uma referência a ele.

O corte não está relacionado com o exposto, e você deve criar uma nova pergunta para isso.

Outras dicas

Uma solução muito mais fácil seria

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

Dê uma olhada em Visão de Quartz 2D para informações sobre o uso Quartz 2D no iPhone.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top