Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 在控制台中获取消息:";CreateWrappedSurface()对于数据提供程序支持的CGImageRef失败;_Objective C_Xcode_Uiimage_Cgimageref_Ciimage - Fatal编程技术网

Objective c 在控制台中获取消息:";CreateWrappedSurface()对于数据提供程序支持的CGImageRef失败;

Objective c 在控制台中获取消息:";CreateWrappedSurface()对于数据提供程序支持的CGImageRef失败;,objective-c,xcode,uiimage,cgimageref,ciimage,Objective C,Xcode,Uiimage,Cgimageref,Ciimage,更新到Xcode 7,并在操作中渲染图像时收到此(警告?)消息: CreateWrappedSurface()对于数据提供程序支持的CGImageRef失败 在Xcode 6.4下没有类似的消息。 已获取引发消息的代码部分: if (!self.originalImage) // @property (nonatomic, strong) UIImage *originalImage; return; CGImageRef originalCGImage = self.orig

更新到Xcode 7,并在操作中渲染图像时收到此(警告?)消息:

CreateWrappedSurface()对于数据提供程序支持的CGImageRef失败

在Xcode 6.4下没有类似的消息。

已获取引发消息的代码部分:

if (!self.originalImage) // @property (nonatomic, strong) UIImage *originalImage;
        return;

CGImageRef originalCGImage = self.originalImage.CGImage;
NSAssert(originalCGImage, @"Cannot get CGImage from original image");
CIImage *inputCoreImage = [CIImage imageWithCGImage:originalCGImage]; // this results the console message
我替换了我的CIIImage创建者以直接从UIImage获取它:

CIImage *originalCIImage = self.originalImage.CIImage;
NSAssert(originalCIImage, @"Cannot build CIImage from original image");
在本例中,我没有收到任何控制台消息,但有一个断言:originalCIImage为nil

UIImage的类引用说明:

@属性(非原子,只读)CIImage*CIImage

如果UIImage对象是使用CGImageRef初始化的,则该属性的值为nil

所以我使用原始代码作为后备:

CIImage *originalCIImage = self.originalImage.CIImage;
if (!originalCIImage) {
    CGImageRef originalCGImageRef = self.originalImage.CGImage;
    NSAssert(originalCGImageRef, @"Unable to get CGimageRef of originalImage");
    originalCIImage = [CIImage imageWithCGImage:originalCGImageRef];
}
NSAssert(originalCIImage, @"Cannot build CIImage from original image");
问题是,我仍然在控制台中收到警告消息

以前有人收到过这个消息吗?用什么方法来处理核武器发出的警告信息

谢谢,
亚当终于找到了答案。对这个错误感到好奇,我研究了CIImage是如何工作的()

我注意到CGImageRef是由预乘值(RGB和A)支持的数据提供程序

我想我正在加载到CIImage中的CGImage(使用
[CIImage-imageWithCGImage:originalgimage];
只是RGB而不是RGBA)。果然,我是通过使用标准的
UIGraphicsBeginImageContextWithOptions
拍摄视图快照来创建这张图像的,我将不透明参数设置为“YES”

我只是改变了:

UIGraphicsBeginImageContextWithOptions(边界,是,1.0f)

UIGraphicsBeginImageContextWithOptions(边界,编号,1.0f)

因此,我现在创建的是RGBA图像,而不是RGB图像

现在我将CGImage转换为CIImage,CIImage现在有了适当的数据提供程序支持,错误消失了


注意
我使用了一个CIClamp滤光片来实现高斯模糊,当“不透明”设置为“否”时,钳制效果就不好了。我决定将不透明设置为“是”,并忽略日志警告,它们实际上似乎没有任何作用。)

当我开始在后台线程中运行cifilter时,我开始了解到这一点(iOS9),因为它们太慢了(在自动删除池中也是如此)。似乎并没有造成任何负面影响,只是那个信息本身,但我仍在研究答案。我似乎也只在模拟器上得到它,而不是在设备上。HMMM只需将您的图像从RGB转换为RGBAThanks即可获得建议!这是避免该警告/错误消息的唯一方法吗?我的意思是,我正在使用CIContext和CIFilter进行操作,在这种方法中引入CGContext感觉有点开销。@AdamSzabo您仍然可以完成所有这些,只需确保您的CGContext不是不透明的,而是有一个alpha通道。