2012-11-12 62 views
1

我试图将图像保存到相机胶卷。这实际上用于奇妙的工作,但我不得不努力工作其他的东西,现在我回到项目更新它的iOS 6和poof此功能不再在iOS6上工作。UIImageWriteToSavedPhotosAlbum和ALAssetsLibrary不保存图像,也没有错误

我已经尝试了两种方法,都是在没有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计算结果为真

在模拟器,应用程序一直没有出现在设置>隐私>照片部分,但是在实际的iPad上,他们确实显示该应用有权访问照片。 (另外,只需添加:上面的第一种方法是我以前使用的 - 它在真实设备&模拟器都一样,没有问题)。

我也试着在主线程上运行这个命令,看看是否改变了任何东西 - 没有区别。我在之前的背景上运行它,它曾经很好地工作(在模拟器和设备上)。

任何人都可以点亮一下吗?

+3

我保存为自定义assetsgroup当碰到这样的问题。除了它会间歇性地工作。我通过在延迟0.1之后执行选择器解决了问题,直到成功。它似乎总是在第二次尝试。我能想到的唯一导致这个问题的原因是由于某些锁定问题,操作系统阻止了您的写入尝试。我会问的另一件事是,你是否从后台线程运行?如果是这样,那是允许的吗?如果是后台,请尝试从主线程。 – Bergasms

+0

是的,我试图在主线程上执行它,结果相同 – drhr

+0

检查应用程序未被拒绝访问隐私设置中的照片。 - 是否调用了'ALAssetsLibraryWriteImageCompletionBlock'?在完成块中'assetURL'和'error'都是'nil'吗? –

回答

0

想通了......我在做一些愚蠢的事情。 UIImage无法获取原始像素数据,您必须首先使用正确的元数据将其转换为可接受的格式。

问题的一部分是我使用Cocos2D从CCRenderTexture(getUIImageFromBuffer())获取UIImage,并且当我切换到Cocos2D-x时,该函数不再可用,并且我简直无法理解这一事实: UIImage对象不能用原始像素数据构建,我认为它自动处理标题信息格式&。

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

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

相关问题