为什么遮罩的图像像素RGB值在IOS图像遮罩中显示原始图像RGB值?

时间:2020-08-11 12:53:19

标签: ios swift image-processing uiimage mask

我正在研究具有分割技术的图像处理移动应用程序。我尝试获取蒙版图像并成功。但是,当我要将遮罩的图像保存到我的相册时,即使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

mask image]

image]

masked image]

1 个答案:

答案 0 :(得分:0)

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

CGImage Masking with UIImage pngData()

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