2011-06-20 55 views

回答

4

要麼使用堆棧模糊,框模糊或使用OpenGL紋理模糊(google前兩個,並檢查後者的Apple開發示例)。

0

https://github.com/rnystrom/RNBlurModalView

-(UIImage *)boxblurImageWithBlur:(CGFloat)blur bluringImage : (UIImage *) image 
{ 

    int boxSize = (int)(blur * 40); 
    boxSize = boxSize - (boxSize % 2) + 1; 

    CGImageRef img = image.CGImage; 
    enter code here 
    vImage_Buffer inBuffer, outBuffer; 

    vImage_Error error; 

    void *pixelBuffer; 


    //create vImage_Buffer with data from CGImageRef 

    CGDataProviderRef inProvider = CGImageGetDataProvider(img); 
    CFDataRef inBitmapData = CGDataProviderCopyData(inProvider); 


    inBuffer.width = CGImageGetWidth(img); 
    inBuffer.height = CGImageGetHeight(img); 
    inBuffer.rowBytes = CGImageGetBytesPerRow(img); 

    inBuffer.data = (void*)CFDataGetBytePtr(inBitmapData); 

    //create vImage_Buffer for output 

    pixelBuffer = malloc(CGImageGetBytesPerRow(img) * CGImageGetHeight(img)); 

    if(pixelBuffer == NULL) 
     NSLog(@"No pixelbuffer"); 

    outBuffer.data = pixelBuffer; 
    outBuffer.width = CGImageGetWidth(img); 
    outBuffer.height = CGImageGetHeight(img); 
    outBuffer.rowBytes = CGImageGetBytesPerRow(img); 

    // Create a third buffer for intermediate processing 
    void *pixelBuffer2 = malloc(CGImageGetBytesPerRow(img) * CGImageGetHeight(img)); 
    vImage_Buffer outBuffer2; 
    outBuffer2.data = pixelBuffer2; 
    outBuffer2.width = CGImageGetWidth(img); 
    outBuffer2.height = CGImageGetHeight(img); 
    outBuffer2.rowBytes = CGImageGetBytesPerRow(img); 

    //perform convolution 
    error = vImageBoxConvolve_ARGB8888(&inBuffer, &outBuffer2, NULL, 0, 0, boxSize, boxSize, NULL, kvImageEdgeExtend); 
    error = vImageBoxConvolve_ARGB8888(&outBuffer2, &inBuffer, NULL, 0, 0, boxSize, boxSize, NULL, kvImageEdgeExtend); 
    error = vImageBoxConvolve_ARGB8888(&inBuffer, &outBuffer, NULL, 0, 0, boxSize, boxSize, NULL, kvImageEdgeExtend); 

    if (error) { 
     NSLog(@"error from convolution %ld", error); 
    } 

    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
    CGContextRef ctx = CGBitmapContextCreate(outBuffer.data, 
              outBuffer.width, 
              outBuffer.height, 
              8, 
              outBuffer.rowBytes, 
              colorSpace, 
              kCGImageAlphaNoneSkipLast); 
    CGImageRef imageRef = CGBitmapContextCreateImage (ctx); 
    UIImage *returnImage = [UIImage imageWithCGImage:imageRef]; 

    //clean up 
    CGContextRelease(ctx); 
    CGColorSpaceRelease(colorSpace); 

    free(pixelBuffer); 
    CFRelease(inBitmapData); 

    CGImageRelease(imageRef); 

    return returnImage; 
} 
+0

歡迎來到SO。請提供描述張貼片段,它將如何幫助/它做什麼 – Nogard

+0

我從 https://github.com/rnystrom/RNBlurModalView這真的幫了我模糊圖像片段。 –

+0

它是真正快速的模糊uiimage的方法。 –