1

私はこのコードを持っています

CIImage * input_ciimage = [CIImage imageWithCGImage:self.CGImage];
CIImage * output_ciimage =
[[CIFilter filterWithName:@"CILanczosScaleTransform" keysAndValues:
                           kCIInputImageKey, input_ciimage,
                           kCIInputScaleKey, [NSNumber numberWithFloat:0.72], // [NSNumber numberWithFloat: 800.0 / self.size.width],
                           nil] outputImage];
CIContext *context = [CIContext contextWithOptions:nil];
CGImageRef output_cgimage = [context createCGImage:output_ciimage 
    fromRect:[output_ciimage extent]];
UIImage *output_uiimage;
output_uiimage = [UIImage imageWithCGImage:output_cgimage 
    scale:1.0 orientation:self.imageOrientation];
CGImageRelease(output_cgimage);
return output_uiimage;

したがって、scaleKey が特定の値より大きい場合、output_uiimage は黒のイメージになります。

私の場合、キー kCIInputScaleKey > @0.52 の値の場合、結果は黒の画像になります。画像を 90 度回転すると、同じ結果が得られましたが、値は 0.72 (0.52 ではありません) でした。

私のコードのライブラリまたは間違いの何が問題になっていますか?

必要に応じて、iPhone 4、iOS 7.1.2、xCode 6.0 を持っています。

4

2 に答える 2

1

Apple は次のように述べています。

このシナリオでは、Core Image のバグが明らかになります。このバグは、レンダリングが GPU テクスチャ制限 (4096) よりも大きい次元を持つ中間バッファーを必要とし、かつ入力画像がこれらの制限に収まる場合に発生します。これは、GL テクスチャ制限に近い幅または高さの入力画像に対してコンボリューション (ブラー、ランチョス) を実行しているフィルターで発生します。
注: 入力画像の寸法の 1 つが 4097 に増加すると、レンダリングは成功します。

CILanczosScaleTransform を CIAffineTransform (低品質) に置き換えるか、CG で画像のサイズを変更することは、提供されているサンプル コードの可能な回避策です。

于 2014-10-21T06:35:14.763 に答える
0

Apple のエンジニアからの要請を受けて、バグ レポートを更新しました。彼らは答えます:

問題は、特定のダウンサンプル スケール ファクターで発生する Core Image Lanczos フィルターにあると考えられます。この問題は今後修正される予定です。

フィルターは、2 の累乗 (つまり、1/2、1/4、1/8) のダウンサンプルでうまく機能するはずです。したがって、ダウンサンプルをこれらの値に制限し、必要に応じて AffineTransform を使用してさらにスケールアップまたはスケールダウンすることをお勧めします。

現在、このバグ レポートは終了しています。

于 2015-05-06T05:45:35.657 に答える