大佬教程收集整理的这篇文章主要介绍了ios – 如何将UIImage / CGImageRef的Alpha通道转换为掩码?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
例如:
基本上,给出任何图像,我不关心图像中的颜色.我想要的是创建一个表示Alpha通道的灰度图像.然后可以使用该图像来屏蔽其他图像.
当您提供图标图像时,其示例行为在UIBarButtonItem中.根据苹果文档,它表示:
UIBarButtonItem接受任何图像,只能看到alpha,而不是图像的颜色.
这是完成这个的一种方法.拿你原来的RBGA图像,并通过以下处理:
>将其绘制为仅Alpha通道位图图像
>反转每个像素的alpha值得到与上述相反的行为
>将此倒置的Alpha图像转换为实际的掩码
>使用它
例如.
#define ROUND_UP(N,S) ((((N) + (S) - 1) / (S)) * (S)) // Original RGBA image CGImageRef originalMaskImage = [[UIImage imagenamed:@"masktest.png"] CGImage]; float width = CGImageGetWidth(originalMaskImagE); float height = CGImageGetHeight(originalMaskImagE); // Make a bitmap context that's only 1 alpha chAnnel // WARNING: the bytes per row probably needs to be a multiple of 4 int StrideLength = ROUND_UP(width * 1,4); unsigned char * alphaData = calloc(StrideLength * height,sizeof(unsigned char)); CGContextRef alphaOnlyContext = CGBitmapContextCreate(alphaData,width,height,8,StrideLength,NULL,kCGImageAlphaOnly); // Draw the RGBA imagE into the alpha-only context. CGContextDrawImage(alphaOnlyContext,CGRectMake(0,height),originalMaskImagE); // Walk the pixels and invert the alpha value. This lets you colorize the opaque shapes in the original image. // If you want to do a Traditional mask (where the opaque values block) just get rid of these loops. for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { unsigned char val = alphaData[y*StrideLength + x]; val = 255 - val; alphaData[y*StrideLength + x] = val; } } CGImageRef alphaMaskImage = CGBitmapContextCreateImage(alphaOnlyContext); CGContextRelease(alphaOnlyContext); free(alphaData); // Make a mask CGImageRef finalMaskImage = CGImageMaskCreate(CGImageGetWidth(alphaMaskImagE),CGImageGetHeight(alphaMaskImagE),CGImageGetBitsPerComponent(alphaMaskImagE),CGImageGetBitsPerPixel(alphaMaskImagE),CGImageGetBytesPerRow(alphaMaskImagE),CGImageGetDataProvider(alphaMaskImagE),falsE); CGImageRelease(alphaMaskImagE);
现在,您可以使用finalMaskImage作为CGContextClipToMask等中的掩码等.
以上是大佬教程为你收集整理的ios – 如何将UIImage / CGImageRef的Alpha通道转换为掩码?全部内容,希望文章能够帮你解决ios – 如何将UIImage / CGImageRef的Alpha通道转换为掩码?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。