私はアルファチャンネル付きの300x400ピクセルのPNG-24を持っています。約140kbです。その一部をマスクしたいので、別の300 x 400の画像をPNG-24として作成しましたが、黒、灰色、白のみで、アルファチャネルはありません。
奇妙なことに、マスクが黒の場合、画像は元の状態に保たれます。透明性はありません。しかし、マスクが白の場合、画像は黒だけになります。透明性はありません。
50x50ピクセルのような非常に小さな画像で部分的に機能します。この関数の何が問題になっているのでしょうか。
+ (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 theImage = image.CGImage;
CGImageRef masked = CGImageCreateWithMask(theImage, mask);
return [UIImage imageWithCGImage:masked];
}
私の背景はオレンジ色なので、この色が透けて見えるはずです。画像を保持するUIImageViewは、clearColor/transparencyおよびopaque=NOに設定されます。