У меня есть проект. Он в основном берет фотографию с камеры iPhone и применяет к фотографии некоторые эффекты. Прежде чем применить эффект, я использую основную графику для масштабирования изображения до нужного размера. После масштабирования и поворота изображения я использую Accelerate framework (vImage) для создания эффекта. Моя проблема заключается в том, что после применения эффекта получается какое-то голубоватое изображение. Однако, если я не масштабирую изображение с помощью основной графики, этого голубоватого оттенка не происходит.
Код масштабирования, который я использую, взят из этого. Почта.
И вот мой код, который применяет эффект:
- (UIImage *)applyFiltertoImage:(UIImage *)img
{
CGImageRef image = img.CGImage;
vImage_Buffer inBuffer, outBuffer;
void *pixelBuffer;
CGDataProviderRef inProvider = CGImageGetDataProvider(image);
CFDataRef inBitmapData = CGDataProviderCopyData(inProvider);
inBuffer.width = CGImageGetWidth(image);
inBuffer.height = CGImageGetHeight(image);
inBuffer.rowBytes = CGImageGetBytesPerRow(image);
inBuffer.data = (void *)CFDataGetBytePtr(inBitmapData);
pixelBuffer = malloc(CGImageGetBytesPerRow(image) * CGImageGetHeight(image));
if (pixelBuffer == NULL) {
NSLog(@"No buffer");
}
outBuffer.data = pixelBuffer;
outBuffer.width = CGImageGetWidth(image);
outBuffer.height = CGImageGetHeight(image);
outBuffer.rowBytes = CGImageGetBytesPerRow(image);
vImageConvolve_ARGB8888(&inBuffer, &outBuffer, NULL, 0, 0, self.kernel, self.size, self.size, self.divisor, NULL, kvImageEdgeExtend);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef ctx = CGBitmapContextCreate(outBuffer.data,
outBuffer.width,
outBuffer.height,
8,
outBuffer.rowBytes,
colorSpace,
kCGImageAlphaNoneSkipLast);
CGImageRef imageRef = CGBitmapContextCreateImage(ctx);
UIImage *blurredImage = [UIImage imageWithCGImage:imageRef];
CGContextRelease(ctx);
CGColorSpaceRelease(colorSpace);
free(pixelBuffer);
CFRelease(inBitmapData);
CGImageRelease(imageRef);
return blurredImage;
}