IOS image masking 中为什么masked 图像像素RGB 值显示原始图像RGB 值?
Why does masked image pixel RGB values show original image RGB values in IOS image masking?
我正在使用分割技术开发图像处理移动应用程序。我尝试获取蒙版图像并成功。但是,当我想将蒙版图像保存到我的相册时,即使 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 (mask) 白色如预期
UIExtendedSRGBColorSpace 0.0313725 0.0313725 0.0313725 1(图像)几乎像预期的那样黑
UIExtendedSRGBColorSpace 0.0313725 0.0313725 0.0313725 1 (masked image) 假设为 1 1 1 1
]
]
]
我在下面的link中找到了原因:
看来我们需要将蒙版图像绘制到Imagecontext中。我测试了给定的代码并且工作正常。
我正在使用分割技术开发图像处理移动应用程序。我尝试获取蒙版图像并成功。但是,当我想将蒙版图像保存到我的相册时,即使 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 (mask) 白色如预期 UIExtendedSRGBColorSpace 0.0313725 0.0313725 0.0313725 1(图像)几乎像预期的那样黑 UIExtendedSRGBColorSpace 0.0313725 0.0313725 0.0313725 1 (masked image) 假设为 1 1 1 1
我在下面的link中找到了原因:
看来我们需要将蒙版图像绘制到Imagecontext中。我测试了给定的代码并且工作正常。