2013-03-31 3 views
2

Я использую CIBloom размыть текст внутри CGImage, но то, что происходит это CIBloom фильтр, кажется делает мое изображение очень немного меньше.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 фильтр, но мне нужны результаты, чтобы быть того же размера, что и у моего исходного изображения, а не с понижением.

ответ

2

Ну, дополнительное пространство, добавленное к изображению для размера ядра по умолчанию 10, равно 21x28.

enter image description here

При K = 10, полученное изображение имеет 21 точек добавляют в каждую сторону, и 28 точек добавляется в верхней и нижней части. Имея в виду, что поддержка составляет 768x1024 px, похоже, что увеличение масштаба создает изображение размером 810x1080.

Игра вокруг с этим, я придумал следующее

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

Это кажется очень приблизительная (должна быть формула для этого) и вносит некоторые искажения, но он работает, чтобы сделать изображение почти то же самое который первоначально был, без введения границ.

enter image description here

+0

чувак спасибо, я искал решения этого на некоторое время теперь – Roecrew

+0

я не в конечном итоге использовать его. Вместо этого я написал свой собственный фильтр цветения на основе кода [Philip Rideout] (http://prideout.net/archive/bloom/) – bobobobo

+0

, что такое tex в этом –

Смежные вопросы