CIColorCube inputCubeData не имеет ожидаемой длины
Я пытаюсь использовать фильтр CIColorCube. Я скопировал вставленный код со страницы Apple ( https://developer.apple.com/library/ios/documentation/GraphicsImaging/Conceptual/CoreImaging/ci_filer_recipes/ci_filter_recipes.html), но я не могу заставить код работать. Я изменил код, и мне удалось избавиться от некоторых ошибок, но я не могу скомпилировать из-за ошибки длины. Может кто-нибудь помочь, пожалуйста?
-(NSImage*)getImageFiltered :(NSURL*)theImage forValue:(double)value
{
CIImage * ciImage = [CIImage imageWithContentsOfURL:theImage];
// Allocate memory
const unsigned int size = 64;
float *cubeData = (float *)malloc (size * size * size * sizeof (float) * 4);
float rgb[3];
// Populate cube with a simple gradient going from 0 to 1
for (int z = 0; z < size; z++){
rgb[2] = ((double)z)/(size-1)+(value/100); // Blue value
for (int y = 0; y < size; y++){
rgb[1] = ((double)y)/(size-1)+(value/100); // Green value
for (int x = 0; x < size; x ++){
float alpha=1.0f;
c[0] = rgb[0] * alpha;
c[1] = rgb[1] * alpha;
c[2] = rgb[2] * alpha;
c[3] = alpha;
c += 4;
}
}
}
// Create memory with the cube data
NSData *data = [NSData dataWithBytesNoCopy:cubeData
length:sizeof(*cubeData)
freeWhenDone:YES];
CIFilter *colorCube = [CIFilter filterWithName:@"CIColorCube"];
[colorCube setValue:@(size) forKey:@"inputCubeDimension"];
// Set data for cube
[colorCube setValue:data forKey:@"inputCubeData"];
[colorCube setValue:ciImage forKey:kCIInputImageKey];
CIImage *result = [colorCube valueForKey: kCIOutputImageKey];
NSCIImageRep *rep = [NSCIImageRep imageRepWithCIImage:result];
NSImage *nsImage = [[NSImage alloc] initWithSize:rep.size];
[nsImage addRepresentation:rep];
return nsImage;
}
Dario
1 ответ
Решение
length:
ценность для вашего dataWithBytesNoCopy:
Звонок должен быть что-то вроде
size_t cubeDataSize = size * size * size * sizeof ( float ) * 4;
Однако в вашем коде есть и другие проблемы; проверьте этот рабочий пример:
https://github.com/vhbit/ColorCubeSample/blob/master/ColorCube/ViewController.m