【问题标题】:CIPixellate output image size is differentCIPixellate输出图像大小不同
【发布时间】:2013-05-08 07:36:09
【问题描述】:

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

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

【问题讨论】:

    标签: iphone ios6 cifilter imagefilter


    【解决方案1】:
    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。这会导致图片的原始尺寸丢失。

    【讨论】:

      猜你喜欢
      • 2013-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-27
      • 2014-12-25
      相关资源
      最近更新 更多