GPUImage:GPUImageToneCurveFilter不起作用

我已经设法在我的应用程序中使用GPUImage,并尝试在button点击时将滤镜放入我的照片中,但还有另一个问题。

GPUImageFilter *selectedFilter; if (sender.tag == 1) { selectedFilter = [[GPUImageFilter alloc] init]; } else if (sender.tag == 2) { selectedFilter = [[GPUImageThresholdEdgeDetection alloc] init]; } else if (sender.tag == 3) { selectedFilter = [[GPUImageSketchFilter alloc] init]; } else if (sender.tag == 4) { selectedFilter = [[GPUImageToneCurveFilter alloc] initWithACV:@"crossprocess.acv"]; } else if (sender.tag == 5) { selectedFilter = [[GPUImageToneCurveFilter alloc] initWithACV:@"Summer.acv"]; } else if (sender.tag == 6) { selectedFilter = [[GPUImageToneCurveFilter alloc] initWithACV:@"NightCat.acv"]; } else if (sender.tag == 7) { selectedFilter = [[GPUImageToneCurveFilter alloc] initWithACV:@"Breeze.acv"]; } else if (sender.tag == 8) { selectedFilter = [[GPUImageToneCurveFilter alloc] initWithACV:@"OldTone.acv"]; } else if (sender.tag == 9) { selectedFilter = [[GPUImageToneCurveFilter alloc] initWithACV:@"Sky.acv"]; } filteredImg = [selectedFilter imageByFilteringImage:image]; [insertPhoto1 setImage:filteredImg]; 

GPUImageToneCurveFilter不工作,每当我点击一个button与.acv筛选器崩溃的应用程序,并引发此错误。

 Thread 1: Program received signal: "EXC_BAD_ACCESS". 

突出在这一部分

 version = CFSwapInt16BigToHost(*(int*)([databuffer bytes])); 

我该怎么办? 错误是什么意思?

似乎你有一个内存pipe理问题在这里铸造你的variables。 你使用两个指针标志。 这在我看来是错的。

 version = CFSwapInt16BigToHost((int*)([databuffer bytes])); 

或更好

 version = CFSwapInt16BigToHost([databuffer bytes]); 

确保参数和返回值符合手册的function!

在苹果手册中对此function进行了说明:

 CFSwapInt16HostToBig 

将主机本地字节顺序中的16位整数转换为big-endian格式。

 uint16_t CFSwapInt16HostToBig ( uint16_t arg ); 

参数 * arg *应该交换字节的整数。 返回值交换字节的整数。 如果主机是big-endian,这个函数返回arg不变。