iphone - CIPixellate输出图像大小不同

标签 iphone ios6 cifilter imagefilter

我正在使用 CIPixellate 在 ios6 中对图像进行像素化。它会产生更大的图像。如何保持原始大小?

    NSData *imageData   =  [NSData dataWithData:UIImageJPEGRepresentation(capturedImageView.image, 1.0)];//[NSData dataWithData:UIImagePNGRepresentation(capturedImageView.image)];
    beginImage = [CIImage imageWithData:imageData];
    context = [CIContext contextWithOptions:[NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] forKey:kCIContextUseSoftwareRenderer]];    
    filter = [CIFilter filterWithName:@"CIPixellate" keysAndValues:kCIInputImageKey, beginImage, @"inputScale", [NSNumber numberWithFloat:14.0], nil];   
    CIImage *outputImage = [filter outputImage];    
    CGImageRef cgimg = [context createCGImage:outputImage fromRect:CGRectMake(0, 0, 320, 480)];   
    UIImage *newImg = [UIImage imageWithCGImage:cgimg];

//新图像尺寸更大,大部分被裁剪:-/

最佳答案

UIImageOrientation originalOrientation = origim.imageOrientation;
CIImage *result = [CIImage imageWithCGImage:origim.CGImage];
CIContext *context = [CIContext contextWithOptions:nil];

CIFilter *pixel = [CIFilter filterWithName:@"CIPixellate"];
[pixel setDefaults];
[pixel setValue:result forKey:@"inputImage"];
[pixel setValue:[CIVector vectorWithX:100.0 Y:100.0] forKey:kCIInputCenterKey];
[pixel setValue:[NSNumber numberWithFloat:yeslider.value] forKey:kCIInputScaleKey];
result = [pixel valueForKey:kCIOutputImageKey];

CGImageRef imgRef = [context createCGImage:result fromRect:result.extent];
UIImage *newImage = [UIImage imageWithCGImage:imgRef];

在您的代码中,您正在从矩形创建 CGImage。您没有使用 .extent。这会导致图像的原始尺寸丢失。

关于iphone - CIPixellate输出图像大小不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16536110/

相关文章:

iphone - 向服务器发送请求时如何添加设备信息?

ios - 快速显示隐藏的容器 View

iphone - 在我的屏幕上安装 iPhone 5 模拟器?

iphone - 播放音频时 AVPlayer 在 StitchedStreamPlayer 示例中崩溃

objective-c - 自定义 CIKernel 移动像素

ios - 从图像中获取所有颜色

ios - 从函数获取 UIImage

IOS - 根据对象值分组对象并显示在 UItableview 部分

iphone - 在将对象作为用户数据发送到通知中心之前,我是否需要自动释放该对象?

ios - 如果用户未在特定选项卡上登录,如何显示登录 View Controller ?