改变 NSImage 的色彩空间
有没有办法可以更改 NSimage 或 NSBitmapImageRep/CGimage 等的颜色空间。我对任何方式都持开放态度。最好采用 Photoshop 的方式。
Is there a way I can change the color space of an NSimage or NSBitmapImageRep/CGimage or the like. I am open to any way. Preferably the way photoshop does it.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您在下面看到的代码的问题
不起作用,因为 Quartz2D 不支持 CMYK 图像或灰度图像的 alpha,它仅受 RGB 图像支持。
您应该做的是创建 2 个图像,然后在 CMYK 颜色空间和带有 alpha 的图像的情况下合并。我搜索了很多关于这个主题的信息,终于找到了。可能这个问题的作者不再需要它,但其他人可能需要它。
创建新的
NSBitmapImageRep
您需要将图像绘制到新的位图中
假设您有
colorSpace: NSColorSpace
此后您将拥有一个 imageRep,它是具有正确颜色空间但没有 alpha(透明度)的图像。
您需要一个遮罩位图。获取面具很棘手。
将白色图像剪辑到具有透明度的图像
将所有像素着色为白色,这将被剪辑到图像。
在此步骤中,您将获得图像和蒙版。接下来我们需要将它们结合起来。我正在使用这个小算法(您需要验证蒙版和源图像具有相同的尺寸和相同的 colorSpaceModel):
The problem with the code you see below
is not working because Quartz2D does not support alpha for CMYK images or gray images, it is supported only by RGB images.
What you should do is creating 2 images then combine then in case of a CMYK color space and image with alpha. I have searched a lot about this topic and finally found. May be author of this question doesn't need it anymore but someone else may need it.
Create new
NSBitmapImageRep
You need to draw your image into the new bitmap
lets say you have
colorSpace: NSColorSpace
After this you will have an imageRep that is the image with correct color space but no alpha (transparency).
You need a mask bitmap. Obtaining mask is tricky.
Clip white image to your image with transparency
Colorize all pixel in white color, this will be clipped to image.
At this step you have a image and a mask. Next we need to combine them. I am using this little algorithm (you need to verify that mask and source image have same sizes and same colorSpaceModel):
要获取 CGColorSpaceRef,您可以执行以下操作
或参阅此页面了解如何创建其他色彩空间。
To get a CGColorSpaceRef, you can do things like
OR see this page for how to create other color spaces.