HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – 如何将UIImage / CGImageRef的Alpha通道转换为掩码?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_404_1@如何提取UI Image或CG ImageRef的Alpha通道,并将其转换为可与CGImageMaskCreate一起使用的掩码?

例如:

基本上,给出任何图像,我不关心图像中的颜色.我想要的是创建一个表示Alpha通道的灰度图像.然后可以使用该图像来屏蔽其他图像.

当您提供图标图像时,其示例行为在UIBarButtonItem中.根据苹果文档,它表示:

UIBarButtonItem接受任何图像,只能看到alpha,而不是图像的颜色.

解决方法

@H_@R_674_11280@_12@ 要按条形按钮项目的方式来绘制图标,您不需要传统的面具,您想要一个面具的倒数 – 原始图像中的不透明像素占用最终着色,而不是其他方式.

这是完成这个的一种方法.拿你原来的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,请注明来意。