0

非常に経験豊富な iOS 開発者への質問です。

Core Graphics 関数CGImageMaskCreateは、グレースケール イメージから CG イメージ マスクを作成します。グレースケールとしてエクスポートされた JPG を使用しています。私は再確認しました:Photoshopで開くとき、画像>モード>に行くと「グレースケール」と表示されます。

次のメソッドは、UIImage カテゴリの一部です。マスクUIImage(グレースケールJPGのみ)を取り、その目標はそれ自体(JPG写真であるUIImage)をマスクして、結果の画像に透明性を持たせることです。

すべての 4 インチ デバイスと iPad 4 で動作します。ただし、CGImageMaskCreate の出力は、iOS 6 または iOS 7 を搭載した 3.5 インチ デバイスでは機能しません。つまり、結果の画像は 100% 透明になります。iPhoneシミュレーター3.5インチ(Xcode 5)でも同じです。理由はわかりません。これは iOS 7 の問題だと言う人もいますが、iOS 7 を搭載した iPhone 5 および 5S で動作します。PNG-8 グレースケールでも同じ結果が得られました。

Apple からの既知の TN またはこのバグの回避策はありますか?

- (UIImage*)maskedImageWithMask:(UIImage *)maskImage {
    CGImageRef imageRef = self.CGImage;
    CGImageRef maskRef = maskImage.CGImage;

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

    CGImageRef maskedImageRef = CGImageCreateWithMask(imageRef, mask);

    UIImage *maskedImage = [UIImage imageWithCGImage:maskedImageRef scale:self.scale orientation:self.imageOrientation];

    CGImageRelease(mask);
    CGImageRelease(maskedImageRef);

    return maskedImage;
}

編集:

3.5 インチの iPhone シミュレーターおよびデバイスでは、CGImageIsMask(マスク) は NO を返します。4 インチ シミュレータおよびデバイスでは、YES が返されます。そのため、CGImageMaskCreate は絶対にマスクを作成しない場合があります。

4

0 に答える 0