【问题标题】:How do I convert a UIImage to NSData or CFDataRef?如何将 UIImage 转换为 NSData 或 CFDataRef?
【发布时间】:2011-10-31 01:03:27
【问题描述】:

如何将UIImage 转换为NSDataCFDataRef?我需要将CFDataRef 传递给ABPersonSetImageData

【问题讨论】:

    标签: iphone ios uiimage


    【解决方案1】:

    这对我有用,适用于 PNG 图像。对于其他图像类型,我假设您只需要找到相应的 UIImage...Representation 方法即可。

    UIImage *image = [UIImage imageNamed:@"imageName.png"];
    NSData *imageData = [NSData dataWithData:UIImagePNGRepresentation(image)];
    

    如果您需要 UIImage 的 CFDataRef,只需多一行。

    CFDataRef imgDataRef = (CFDataRef)imageData;
    

    【讨论】:

    • 你为什么使用+[NSData dataWithData:]
    • 触摸。我想你可以这样做NSData *imageData = UIImagePNGRepresentation(image);
    【解决方案2】:

    你可以用这个

    NSData *imageData = UIImageJPEGRepresentation(image, 1.0);
    

    只需将 imageData 转换为 CFDataRef

    CFDataRef = (CFDataRef) imageData;
    

    【讨论】:

    • NSData *imageData = UIImageJPEGRepresentation(image, 1.0);很慢也相当于png方法。有什么快速的方法吗??????
    【解决方案3】:
    CFDataRef cfdata = CFDataCreate(NULL, [imageData bytes], [imageData length]);
    

    点击here查看工作示例。

    谢谢。

    【讨论】:

      【解决方案4】:

      对于那些想知道NSDataCFData有什么区别的人,这里是Apple Docs的解释:

      CFData 与其 Cocoa Foundation 对应物“免费桥接”, NS 数据。这意味着核心基础类型是 与桥接的函数或方法调用可互换 基础对象。换句话说,在您看到 NSData 的方法中 * 参数,你可以传入一个 CFDataRef,在你看到 CFDataRef 参数的函数中,你可以传入一个 NSData 实例。这 也适用于 NSData 的具体子类。请参阅免费桥接 有关免费桥接的更多信息的类型。

      这解释了为什么将 NSData 转换为 CFData 有效。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-13
        • 1970-01-01
        • 2011-09-22
        • 2010-12-21
        • 2013-11-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多