UIImageWriteToSavedPhotosAlbum和ALAssetsLibrary没有保存图像,也没有错误

时间:2012-11-12 06:02:29

标签: objective-c ios

我正在尝试将图像保存到相机胶卷。这实际上用来工作得非常好,但是我不得不处理其他事情,现在我回到项目为iOS 6更新它并且 poof 这个功能在iOS6上根本不再有用。< / p>

我尝试了两种方法,两种方法都在没有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] == ALAuthorizationStatusAuthorized评估为真

在模拟器上,应用程序永远不会出现在设置&gt;隐私&gt;照片部分,但在实际的iPad上,他们确实显示该应用有权访问照片。 (另外,只是补充一点:上面的第一种方法就是我之前使用过的 - 它在真实设备和模拟器上都有用,没问题)。

我也尝试在主线程上运行它,看看是否改变了什么 - 没有区别。我以前在后台运行它,它曾经工作正常(在模拟器和设备上)。

任何人都能解释一下吗?

1 个答案:

答案 0 :(得分:0)

想出来......我做了一些愚蠢的事。 UIImage无法获取原始像素数据,您必须首先将其按照可以接受的形式进行按摩,并使用适当的元数据。

部分问题是我使用Cocos2D从CCRenderTexture(getUIImageFromBuffer())获取UIImage,当我切换到Cocos2D-x时,该功能不再可用,而我根本不知道UIImage的事实对象不能用原始像素数据构造,我认为它处理了标题信息&amp;自动格式化。

这个答案有帮助:iPhone - UIImage imageWithData returning nil

这个例子也很有帮助: http://www.wmdeveloper.com/2010/09/create-bitmap-graphics-context-on.html?m=1