首页 > 解决方案 > 为什么在IOS图像蒙版中蒙版图像像素RGB值显示原始图像RGB值?

问题描述

我正在开发具有分割技术的图像处理移动应用程序。我尝试获取蒙面图像并成功。但是,当我想将蒙版图像保存到我的相册时,即使 UIImage 视图显示蒙版图像,也会保存原始图像。此外,我想更改蒙版区域的白色背景像素颜色,并意识到蒙版像素的原始图像 RGB 值仍然受到保护。下面是我用来屏蔽图像和读取的 RGB 值的代码。蒙版区域像素为 255(表示 1),蒙版图像中未蒙版区域为 0。请按预期查看我得到的图像。但是RGB颜色和保存的图像不是蒙版图像而是原始图像(图像)。我做错了什么?任何解释为什么原始图像的 RGB 颜色仍然在蒙版图像中读取,而 UIview 似乎正确(白色背景)

    func maskImage(image:UIImage, mask:UIImage)->UIImage{

    let imageReference = image.cgImage
    let maskReference = mask.cgImage
    
    let imageMask = CGImage(maskWidth: maskReference!.width,
                            height: maskReference!.height,
                            bitsPerComponent: maskReference!.bitsPerComponent,
                            bitsPerPixel: maskReference!.bitsPerPixel,
                            bytesPerRow: maskReference!.bytesPerRow,
                            provider: maskReference!.dataProvider!, decode: nil, shouldInterpolate: true)

    let maskedReference = imageReference!.masking(imageMask!)

    let maskedImage = UIImage(cgImage:maskedReference!)
    
    print(mask.getPixelColor(x: 0, y: 0)!)
    print(image.getPixelColor(x: 0, y: 0)!)
    print(maskedImage.getPixelColor(x: 0, y: 0)!)

   return maskedImage
}

第一个像素(左上角)的打印值按顺序排列: UIExtendedSRGBColorSpace 1 1 1 1(掩码)白色,如预期 UIExtendedSRGBColorSpace 0.0313725 0.0313725 0.0313725 1(图像)几乎为黑色,如预期 UIExtendedSRGBColorSpace 0.0313725 0.0313725 0.0313725 1)假设图像被屏蔽 1 1 1 1

蒙版图像]

图片]

蒙版图像]

标签: iosswiftimage-processinguiimagemask

解决方案


我在下面的链接中找到了原因:

使用 UIImage pngData() 进行 CGImage 遮罩

看来我们需要将蒙版图像绘制到 Imagecontext 中。我测试了给定的一段代码并且工作正常。


推荐阅读