6

別の画像をマスクとして渡して画像をマスクしたい。画像をマスクすることはできますが、結果の画像は見栄えがよくありません。縁がギザギザになっています。

問題は網膜グラフィックスに関連していると思います。2 つの画像のスケール プロパティは、次のように異なります。

  1. マスクしたい画像のスケール値は 1 です。通常、この画像の解像度は 1000x1000 ピクセルを超えます。
  2. 結果の画像(白黒のみの画像)が必要な画像のスケール値は2です。この画像は通常、解像度300x300ピクセルです。

結果のイメージのスケール値は 1 です。

私が使用しているコードは次のとおりです。

+ (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)maskImage {

CGImageRef maskRef = maskImage.CGImage;

CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
                                    CGImageGetHeight(maskRef),
                                    CGImageGetBitsPerComponent(maskRef),
                                    CGImageGetBitsPerPixel(maskRef),
                                    CGImageGetBytesPerRow(maskRef),
                                    CGImageGetDataProvider(maskRef), NULL, false);


CGImageRef masked = CGImageCreateWithMask([image CGImage], mask);
CGImageRelease(mask);
UIImage *maskedImage = [UIImage imageWithCGImage:masked ];
CGImageRelease(masked);
return maskedImage;
}

網膜スケールに従うマスクされた画像を取得するにはどうすればよいですか?

4

2 に答える 2

5

同じ問題がありました。この行は倍率を無視しているようです。

UIImage *maskedImage = [UIImage imageWithCGImage:masked];

そのため、自分でイメージを描画する必要があります。次のように置き換えます。

UIGraphicsBeginImageContextWithOptions(image.size, NO, 0.0);

CGContextRef context = UIGraphicsGetCurrentContext();

CGRect rect = CGRectMake(0, 0, image.size.width, image.size.height);

CGContextDrawImage(context, rect, masked);

UIImage * maskedImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

私はうまく動作します。

編集

また

UIImage * maskedImage = [UIImage imageWithCGImage:masked 
                                            scale:[[UIScreen mainScreen] scale] 
                                      orientation:UIImageOrientationUp];
于 2014-01-08T13:49:47.450 に答える
5

できるよ

UIImage * maskedImage = [UIImage imageWithCGImage:masked scale:[[UIScreen mainScreen] scale] orientation:UIImageOrientationUp];
于 2014-02-01T10:26:24.307 に答える