1

画面のピクセルデータにアクセスしようとしています。非常に奇妙なことに、この方法は ipad 3 では機能しましたが、ipod touch 4 では失敗しました。最初に、FastBlurredNotificationCenter からいくつかの行を使用して、画面から UIImage を取得しました。

IOSurfaceRef surface = [UIWindow createScreenIOSurface];
UIImage *imageui = [[UIImage alloc] _initWithIOSurface:surface scale:[UIScreen mainScreen].scale orientation:UIImageOrientationUp];

これは確かに両方のデバイスで機能します。

次に、UIImage から CGImage を取得しようとしました。

CGImageRef imagecg = imageui.CGImage

このコードは ipod (cgimage size={0,0}) では機能しません。したがって、UIImage は CIImage から作成され、テストする行が追加されている可能性があると想定しています。

NSLog(@"debug-ciimage:%@-cgimage:%@",imageui.CIImage,imageui.CGImage);

どちらの結果も「null」です。CGImage または PNG 表現から UIImage execpt のピクセル データにアクセスする方法が他にわかりません。助けてください...

試したメソッドのリスト: 1. [UIImage CGImage]; 2. [UIImage CIImage]; 3. [UIImage drawInRect:imageRect]; (UIGraphicsBeginImageContextWithOptions(contextsize, NO, 0.0f); で指定されたコンテキストを使用)

追加: 方法で問題を解決しました。しかし、IOSurface から作成された UIImage の画像タイプはまだ不明です...解決策は、私が処理できない UIImage を回避することです... iphonedevwikiから、代替手段があります -(id)initWithIOSurface:(IOSurfaceRef)ioSurface;

あれは

CGImageRef UICreateCGImageFromIOSurface(IOSurfaceRef ioSurface);

両方のデバイスで動作します。

結論としては、UIView で使用する場合は initWithIOSurface が適しています。それ以外の場合は、UICreateCGImageFromIOSurface を使用すると、簡単に好きなものに変換できます。

スタックオーバーフローに関する私の最初の質問を手伝ってくれた JustSid に感謝します。

4

0 に答える 0