0

私はiOSアプリケーションを持っています。カメラから写真を撮り、これを保存してからマスクでトリミングします。カメラからの最初の画像は正しく保存されますが、マスクを適用すると、低解像度で引き伸ばされた画像で保存されます。

この Objective-C コードをアプリケーションに使用して、マスクを適用しています。

- (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)mask_Image {
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    //UIImage *maskImage = maskImage1;
    CGImageRef maskImageRef = [mask_Image CGImage];
    // create a bitmap graphics context the size of the image
    CGContextRef mainViewContentContext = CGBitmapContextCreate (NULL, mask_Image.size.width, mask_Image.size.height, 8, 0, colorSpace, kCGImageAlphaPremultipliedLast);
    if (mainViewContentContext==NULL)
        return NULL;
    CGFloat widthratio = 0;
    CGFloat heightratio = 0;
    widthratio = mask_Image.size.width / image.size.width;
    heightratio = mask_Image.size.height / image.size.height;
    CGRect rect1 = {{0, 0}, {mask_Image.size.width, mask_Image.size.height}};
    CGRect rect2 = {{-((image.size.width*widthratio)-mask_Image.size.width)/2 , -((image.size.height*heightratio)-mask_Image.size.height)/2}, {image.size.width*widthratio, image.size.height*heightratio}};
    CGContextClipToMask(mainViewContentContext, rect1, maskImageRef);
    CGContextDrawImage(mainViewContentContext, rect2, image.CGImage);
    // Create CGImageRef of the main view bitmap content, and then
    // release that bitmap context
    CGImageRef newImage = CGBitmapContextCreateImage(mainViewContentContext);
    CGContextRelease(mainViewContentContext);
    UIImage *theImage = [UIImage imageWithCGImage:newImage];
    CGImageRelease(newImage);
    // return the image

    NSData* imageData =  UIImagePNGRepresentation(theImage);     // get png representation
    UIImage* pngImage = [UIImage imageWithData:imageData];
    UIImageWriteToSavedPhotosAlbum(pngImage, nil, nil, nil);
    return theImage;
}

私はこれを次のように正しく取得したい:

  1. 私はカメラから写真を撮ります:

ここに画像の説明を入力

  1. マスク イメージをカメラ イメージの必要な位置に適用します。

ここに画像の説明を入力

  1. そして、トリミングした画像をマスクします。

ここに画像の説明を入力

正しいマスクされた画像を取得するにはどうすればよいですか?

4

0 に答える 0