[IOS 开发] UIImage改变像素值

– (UIImage*) imageBlackToTransparent:(UIImage*) image{// 分配内存const int imageWidth = image.size.width;const int imageHeight = image.size.height;size_tbytesPerRow = imageWidth * 4;uint32_t* rgbImageBuf = (uint32_t*)malloc(bytesPerRow * imageHeight);// 创建contextCGColorSpaceRef 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;ptr[1] = 0;ptr[2] = 0;ptr[3] = 0;}}// 将内存转成imageCGDataProviderRef 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时已提供释放函数,,这里不用freereturn resultUIImage;}/** 颜色变化 */void ProviderReleaseData (void *info, const void *data, size_t size){free((void*)data);}

你可以用爱得到全世界,你也可以用恨失去全世界

[IOS 开发] UIImage改变像素值

相关文章:

你感兴趣的文章:

标签云: