CIBloom使图像更小

时间:2013-03-31 06:22:35

标签: cgimage ciimage

我正在使用CIBloom来模糊CGImage内的一些文字,但是发生的事情是CIBloom过滤器似乎是 使我的图像变得更小

当滤波器内核变大时效果更差。我有点期待这个,但我需要一种方法来关闭它,或者一个公式来调整图像的大小,以便每个字母的大小与它原来的大小完全相同。我故意在我的源图像上留下边距。

在CIBloom过滤之前:

a

CIBloom过滤后:

enter image description here

模糊过滤器的代码:

CGImageRef cgImageRef = CGBitmapContextCreateImage( tex->cgContext ) ;

CIImage *cii = [CIImage imageWithCGImage:cgImageRef] ;

CIFilter *filter = [CIFilter filterWithName:@"CIBloom"] ; //CIGaussianBlur

[filter setValue:cii forKey:kCIInputImageKey];
[filter setValue:[NSNumber numberWithFloat:1.1f] forKey:@"inputIntensity"];

// Large radius makes result EVEN SMALLER:
//[filter setValue:[NSNumber numberWithFloat:100.f] forKey:@"inputRadius"];

CIContext *ciContext = [CIContext contextWithOptions:nil];

CIImage *ciResult = [filter valueForKey:kCIOutputImageKey];
CGImageRef cgIRes = [ciContext createCGImage:ciResult fromRect:[ciResult extent]];

//Clear old tex
tex->clearBacking( 0, 0, 0, 1 ) ;

// Drop CIImage result into texture raw data
CGContextDrawImage( tex->cgContext, CGRectMake(0, 0, tex->w, tex->h), cgIRes ) ;

我喜欢CIBloom过滤器,但我需要将结果与原始图像相同,而不是下采样。<​​/ p>

2 个答案:

答案 0 :(得分:2)

嗯,为默认内核大小10添加到图像的额外空间是21x28。

enter image description here

对于K = 10,所得图像每侧加21px,顶部和底部加28px。请记住支持是768x1024像素,看起来放大产生的图像为810x1080。

玩弄这个,我想出了以下

CGContextDrawImage( tex->cgContext, CGRectMake(-30, -36, tex->w+2*30, tex->h+2*36), cgIRes ) ;

这似乎非常近似(必须有一个公式)并引入一些失真,但它可以使图像几乎与原来的大小相同,而不会引入边框。

enter image description here

答案 1 :(得分:0)

光晕效果会更改原始图像的位置和大小。所以您需要重新编辑。
您可以更改以下代码行:

CGImageRef cgIRes = [ciContext createCGImage:ciResult fromRect:[ciResult extent]];

进入

CGImageRef cgIRes = [ciContext createCGImage:ciResult fromRect:[cii extent]];

希望它对您有帮助