2013-05-14 124 views
1

我使用CIPixellate在ios6中對圖像進行像素化。它會產生更大的圖像。我怎樣才能保持原來的大小?CIPixellate輸出圖像大小不同

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]; 

//新圖像的尺寸更大,大部分裁剪: -/

回答

2
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。這會導致圖像的原始尺寸丟失。

相關問題