2009-08-31 14 views
8

मेरे आईफोन एप्लिकेशन में मेरे पास एक काला और सफेद UIImage है। मुझे उस छवि को धुंधला करने की ज़रूरत है (गॉसियन ब्लर करेगा)।आईफोन: ब्लर यूआईएममेज

आईफोन स्पष्ट रूप से जानता है कि it does that when it draws shadows के रूप में छवियों को कैसे धुंधला करना है।

हालांकि मुझे एपीआई में कुछ भी नहीं मिला।

क्या मुझे हार्डवेयर त्वरण के बिना हाथ से धुंधला करना है?

उत्तर

0

मूल रूप से धुंध प्रभाव को लागू करने के लिए कोई सीधी आगे एपीआई नहीं है। इसे पूरा करने के लिए आपको पिक्सल को संसाधित करने की आवश्यकता है।

आईफोन ढाल के माध्यम से छाया खींचता है और धुंधला नहीं होता है।

0

एक छवि को धुंधला करने के लिए, आप एक रूपांतरण मैट्रिक्स का उपयोग करेंगे। एक रूपांतरण मैट्रिक्स लागू करने के लिए sample code यहां है, और यहां एक overview of convolution matrices और कुछ नमूना मैट्रिक्स (धुंध और गाऊशियन ब्लर सहित) है।

14

इस (here पाया जाता है) का प्रयास करें:

@interface UIImage (ImageBlur) 
- (UIImage *)imageWithGaussianBlur; 
@end 

@implementation UIImage (ImageBlur) 
- (UIImage *)imageWithGaussianBlur { 
    float weight[5] = {0.2270270270, 0.1945945946, 0.1216216216, 0.0540540541, 0.0162162162}; 
    // Blur horizontally 
    UIGraphicsBeginImageContext(self.size); 
    [self drawInRect:CGRectMake(0, 0, self.size.width, self.size.height) blendMode:kCGBlendModePlusLighter alpha:weight[0]]; 
    for (int x = 1; x < 5; ++x) { 
     [self drawInRect:CGRectMake(x, 0, self.size.width, self.size.height) blendMode:kCGBlendModePlusLighter alpha:weight[x]]; 
     [self drawInRect:CGRectMake(-x, 0, self.size.width, self.size.height) blendMode:kCGBlendModePlusLighter alpha:weight[x]]; 
    } 
    UIImage *horizBlurredImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    // Blur vertically 
    UIGraphicsBeginImageContext(self.size); 
    [horizBlurredImage drawInRect:CGRectMake(0, 0, self.size.width, self.size.height) blendMode:kCGBlendModePlusLighter alpha:weight[0]]; 
    for (int y = 1; y < 5; ++y) { 
     [horizBlurredImage drawInRect:CGRectMake(0, y, self.size.width, self.size.height) blendMode:kCGBlendModePlusLighter alpha:weight[y]]; 
     [horizBlurredImage drawInRect:CGRectMake(0, -y, self.size.width, self.size.height) blendMode:kCGBlendModePlusLighter alpha:weight[y]]; 
    } 
    UIImage *blurredImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    // 
    return blurredImage; 
} 

और इस तरह इसका इस्तेमाल:

UIImage *blurredImage = [originalImage imageWithGaussianBlur]; 

मजबूत कलंक प्राप्त करने के लिए अभी इस आशय दो बार या उससे अधिक :)

6

लागू होने के बाद अतीत से एक ही समस्या, इस lib की जांच करें:

https://github.com/tomsoft1/StackBluriOS

बहुत आसान भी उपयोग करने के लिए:

UIImage *newIma=[oldIma stackBlur:radius]; 
संबंधित मुद्दे