쿼츠를 사용하여 기존 이미지 위에 그리어 새 이미지를 어떻게 작성합니까?

StackOverflow https://stackoverflow.com/questions/1437883

문제

uiimageview와 함께보기가 있습니다. 카메라 별로이 uiimageview 이미지를 할당합니다. 라인은 원이나 모양과 같은 것을 결합합니다. 예를 들어 특정 영역을 다른 것으로 바꾸고 싶습니다. uiimage보기 위에 그려졌습니다 ...

alt text

그러나 ImageView의 이미지에서 어떻게 그리는가 .. ImageView의 이미지를 수정하는 방법은 무엇입니까 ???

또한 클리어 버튼을 클릭하거나 실행 취소와 같은 것을 클릭하면 이미지를 복원하고 싶습니다. 누군가가 이것을 달성하는 방법을 알고 있습니까?

그리고

자르기 버튼을 클릭하면 사각형을 만드는 방법 화면의 어디에서나 사각형을 이동 한 다음 버튼을 눌러 이미지를 자른 다음 자른 이미지를 저장합니다.

도움이 되었습니까?

해결책

이것이 단계입니다.

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

오래된 이미지로 복원하려면 참조를 유지하십시오.

자르기는 위와 관련이 없으며 이에 대한 새로운 질문을 만들어야합니다.

다른 팁

훨씬 쉬운 솔루션이 될 것입니다

(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