UIImge去掉黑色背景-----
来源:互联网 发布:淘宝保证金能全部退吗 编辑:程序博客网 时间:2024/05/03 04:12
今天在做图像叠加的时候,由于给我的图片有黑色背景,想去背景叠加,这里是我找到的代码,记录一下,以后说不定还能用到。
- (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);}
这里必须是单色,不然去除后会有噪点,不能去除干净。
0 0
- UIImge去掉黑色背景-----
- Listview 去掉黑色背景
- Android Dialog去掉黑色背景
- 去掉图片转换后的黑色背景
- Android AlertDialog去掉系统黑色背景
- cocos2dx去掉黑色背景----ccBlendFunc的使用
- 【Geoserver发布WMS】遥感影像去掉黑色背景的问题
- android Dialog去掉黑色的背景和边框
- Android_ListView_去掉滑动时的黑色背景和点击某个item时的橙黄色背景
- 去掉ListView滑动的黑色背景和点击ListView某个item的橙黄色背景
- eclipse黑色主题黑色背景
- 去掉listview每行之间的黑线与listView拖动时背景变成黑色的问题
- IOS UIWebView去掉滚动条和黑色背景即拖拽后的上下阴影
- [Android界面] 如何 去掉dialog的黑色背景和边框 DEMO
- ios UIWebView隐藏右侧和底部的滚动条,去掉滚动边界的黑色背景
- UIWebView隐藏右侧和底部滚动条,去掉滚动边界的黑色背景,禁止左右滑动
- <iframe 去掉黑色边框
- android去掉黑色状态栏
- 2014 Canada Goose Jakke Salg sale 9whg
- 写在我成为大神的前面
- android去除标题栏和状态栏(全屏)
- 2014 cheap burberry scarf sale 4whg
- 在C语言头文件里“定义”全局变量的方法
- UIImge去掉黑色背景-----
- 误Ghost后的分区恢复
- POJ 1330 Nearest Common Ancestors 最近公共祖先 欧拉序列RMQ
- Sundy嵌入式底层开发课程笔记5 --系统及其它
- HTML的label标签
- 母函数用法
- Windows Mobile 6.1通过蓝牙串口传输数据
- Sundy嵌入式底层开发课程笔记6 --网络配置管理
- hadoop不同版本的集群数据迁移:distcp