首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CIPixellate输出图像大小不同

CIPixellate输出图像大小不同
EN

Stack Overflow用户
提问于 2013-05-14 13:58:47
回答 1查看 1.1K关注 0票数 2

我在ios6中使用CIPixellate对图像进行像素化。它会产生更大的图像。我怎样才能保持原来的尺寸?

代码语言:javascript
复制
    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];

//新图片更大了,大部分都被裁剪了:-/

EN

回答 1

Stack Overflow用户

发布于 2014-01-17 14:19:56

代码语言:javascript
复制
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];

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16536110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档