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不变。