UIImge去掉黑色背景-----
2014-11-10 20:21
274 查看
今天在做图像叠加的时候,由于给我的图片有黑色背景,想去背景叠加,这里是我找到的代码,记录一下,以后说不定还能用到。
这里必须是单色,不然去除后会有噪点,不能去除干净。
- (UIImage*) imageBlackToTransparent:(UIImage*) image { // 分配内存 const int imageWidth = image.size.width; const int imageHeight = image.size.height; size_t bytesPerRow = imageWidth * 4; uint32_t* rgbImageBuf = (uint32_t*)malloc(bytesPerRow * imageHeight); // 创建context CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); CGContextRef context = CGBitmapContextCreate(rgbImageBuf, imageWidth, imageHeight, 8, bytesPerRow, colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaNoneSkipLast); CGContextDrawImage(context, CGRectMake(0, 0, imageWidth, imageHeight), image.CGImage); // 遍历像素 int pixelNum = imageWidth * imageHeight; uint32_t* pCurPtr = rgbImageBuf; for (int i = 0; i < pixelNum; i++, pCurPtr++) { if ((*pCurPtr & 0xFFFFFF00) == 0) // 将黑色变成透明 { uint8_t* ptr = (uint8_t*)pCurPtr; ptr[0] = 0; } // 改成下面的代码,会将图片转成灰度 /*uint8_t* ptr = (uint8_t*)pCurPtr; // gray = red * 0.11 + green * 0.59 + blue * 0.30 uint8_t gray = ptr[3] * 0.11 + ptr[2] * 0.59 + ptr[1] * 0.30; ptr[3] = gray; ptr[2] = gray; ptr[1] = gray;*/ } // 将内存转成image CGDataProviderRef dataProvider = CGDataProviderCreateWithData(NULL, rgbImageBuf, bytesPerRow * imageHeight,ProviderReleaseData); CGImageRef imageRef = CGImageCreate(imageWidth, imageHeight, 8, 32, bytesPerRow, colorSpace, kCGImageAlphaLast | kCGBitmapByteOrder32Little, dataProvider, NULL, true, kCGRenderingIntentDefault); CGDataProviderRelease(dataProvider); UIImage* resultUIImage = [UIImage imageWithCGImage:imageRef]; // 释放 CGImageRelease(imageRef); CGContextRelease(context); CGColorSpaceRelease(colorSpace); // free(rgbImageBuf) 创建dataProvider时已提供释放函数,这里不用free return resultUIImage; } void ProviderReleaseData (void *info, const void *data, size_t size) { free((void*)data); }
这里必须是单色,不然去除后会有噪点,不能去除干净。
相关文章推荐
- Android中滑动ListView的黑色背景和点击ListView某个item的橙黄色背景怎么去掉
- 【Geoserver发布WMS】遥感影像去掉黑色背景的问题
- Android Dialog去掉黑色背景
- IOS UIWebView去掉滚动条和黑色背景即拖拽后的上下阴影
- [Android界面] 如何 去掉dialog的黑色背景和边框 DEMO
- ios UIWebView隐藏右侧和底部的滚动条,去掉滚动边界的黑色背景
- cocos2dx去掉黑色背景----ccBlendFunc的使用
- 去掉图片转换后的黑色背景
- Android AlertDialog去掉系统黑色背景
- Android_ListView_去掉滑动时的黑色背景和点击某个item时的橙黄色背景
- UIWebView隐藏右侧和底部滚动条,去掉滚动边界的黑色背景,禁止左右滑动
- Android中滑动ListView的黑色背景和点击ListView某个item的橙黄色背景怎么去掉
- 如何去掉UIWebView的黑色背景
- 去掉listview每行之间的黑线与listView拖动时背景变成黑色的问题
- 自定义输入dialog,圆角边框,去掉底部黑色背景。去掉editText黄色输入框。
- Listview 去掉黑色背景
- [Android界面] 如何 去掉dialog的黑色背景和边框 DEMO
- 怎样去掉UIWebView 右侧的滚动条,和滚动时出界后的黑色背景
- android Dialog去掉黑色的背景和边框
- 去掉ListView滑动的黑色背景和点击ListView某个item的橙黄色背景