1

画像をカメラロールに保存しようとしています。これは実際には素晴らしく機能していましたが、他の作業をしなければならなかったので、今はプロジェクトに戻ってiOS 6用に更新し、この機能はiOS6ではまったく機能しなくなりました。

私は2つのアプローチを試しましたが、どちらもNSErrorオブジェクトなしでサイレントに失敗しています。まず、UIImageWriteToSavedPhotosAlbum:

UIImageWriteToSavedPhotosAlbum(img, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);

// Callback
-(void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo
{
    // error == nil
}

...およびALAssetsLibraryアプローチ:

ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library writeImageToSavedPhotosAlbum:[img CGImage]
                          orientation:(ALAssetOrientation)[img imageOrientation]
                      completionBlock:^(NSURL *assetURL, NSError *error)
{
    // assetURL == nil
    // error == nil
}

また、[ALAssetsLibrary authorizationStatus] == ALAuthorizationStatusAuthorizedtrueと評価されます

シミュレーターでは、アプリは[設定]>[プライバシー]>[写真]セクションに表示されませんが、実際のiPadでは、アプリに写真へのアクセス許可があることが表示されます。(また、追加するだけです:上記の最初のアプローチは私が以前に使用したものでした-それは実際のデバイスとシミュレーターで同様に機能しました、問題ありません)。

また、これをメインスレッドで実行して、何かが変わったかどうかを確認しました。違いはありません。以前はバックグラウンドで実行していましたが、以前は(シミュレーターとデバイスの両方で)正常に動作していました。

誰かが光を当てることができますか?

4

1 に答える 1

0

考えてみた...私は愚かなことをしていました。UIImage は生のピクセル データを取得できません。最初に適切なメタデータを使用して、受け入れ可能な形式に変換する必要があります。

問題の一部は、CCRenderTexture (getUIImageFromBuffer()) から UIImage を取得するために Cocos2D を使用していたことと、Cocos2D-x に切り替えたときにその機能が使用できなくなったことです。生のピクセルデータで構成されているため、ヘッダー情報とフォーマットを自動的に処理すると考えました。

この回答は役に立ちました:iPhone - UIImage imageWithDataがnilを返す

また、この例も役に立ちました: http://www.wmdeveloper.com/2010/09/create-bitmap-graphics-context-on.html?m=1

于 2012-11-15T19:06:47.553 に答える