如果我有UIImage或CGContextRef或純粹的位圖數據(直接訪問解壓縮的ARGB-8像素),我最好的選擇是儘可能快地模糊半徑爲10像素的圖像?如何高效,快速地模糊iPhone上的圖像?
3
A
回答
4
要麼使用堆棧模糊,框模糊或使用OpenGL紋理模糊(google前兩個,並檢查後者的Apple開發示例)。
5
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;
}
相關問題
- 1. ARM NEON的快速高斯模糊圖像濾波器
- 2. Android:快速位圖模糊?
- 3. iPhone 4 - 高分辨率圖像模糊
- 4. 如何高效快速地調整高分辨率tif圖像的大小?
- 5. iPhone爲圖像添加模糊效果
- 6. iphone上的模糊圖像jquery mobile
- 7. 快速模糊圖像與積分圖像(OpenCV)
- 8. 如何快速高效地打開和操作圖片?
- 9. 如何在css/js中快速模糊?
- 10. 快速模糊效果不返回到主視圖
- 11. ImageMagick:尋找一種模糊圖像的快速方法
- 12. 如何模糊iframe以模糊圖像?
- 13. 快速高效地獲取屏幕(查看)黑色像素
- 14. 在iPhone上高效地存儲和檢索圖像
- 15. 模糊佈局 - 「高度對'圖像視圖'模糊不清'」
- 16. OpenCV:高斯模糊的裁剪圖像
- 17. 如何模糊圖像?
- 18. 高斯模糊與OpenCV:只模糊圖像的子區域?
- 19. asp.net mvc - 如何快速高效地創建假測試對象
- 20. SQLITE3如何快速高效地查詢此?
- 21. Ocaml高效快速排序
- 22. Sql高效快速搜索
- 23. 使用圖像的快速等效initWithContentsOfFile
- 24. 模糊像素的iPhone 4
- 25. HTML5高斯模糊效果
- 26. 在linux上快速高效地繪製pixelarray
- 27. 更快速地更新圖像像素
- 28. iPhone:快速讀取許多圖像
- 29. 模糊的Qt快速文本
- 30. 快速徑向模糊的IOS
歡迎來到SO。請提供描述張貼片段,它將如何幫助/它做什麼 – Nogard
我從 https://github.com/rnystrom/RNBlurModalView這真的幫了我模糊圖像片段。 –
它是真正快速的模糊uiimage的方法。 –