2009-08-31 28 views
8

Trong ứng dụng iPhone của tôi, tôi có màu đen và trắng UIImage. Tôi cần làm mờ hình ảnh đó (Gaussian blur sẽ làm).iPhone: Blur UIImage

iPhone biết rõ cách làm mờ hình ảnh, như it does that when it draws shadows.

Tuy nhiên tôi không tìm thấy bất kỳ điều gì có liên quan trong API.

Tôi có phải làm mờ bằng tay mà không cần tăng tốc phần cứng không?

Trả lời

0

Về cơ bản, không có API chuyển tiếp thẳng nào để triển khai hiệu ứng mờ. Bạn cần xử lý các pixel để thực hiện điều đó.

iPhone vẽ bóng bằng phương tiện có độ dốc và không bị mờ.

0

Để làm mờ hình ảnh, bạn sẽ sử dụng ma trận chập. Đây là sample code để áp dụng ma trận chập, và đây là một overview of convolution matrices cũng như một số ma trận mẫu (bao gồm mờ và mờ gaussian).

14

Hãy thử điều này (tìm thấy 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; 
} 

Và sử dụng nó như thế này:

UIImage *blurredImage = [originalImage imageWithGaussianBlur]; 

Để có được mờ mạnh chỉ áp dụng hiệu ứng này hai lần trở lên :)

Các vấn đề liên quan