使用 NSImage 创建并写入调色板 RGBA PNG
我正在尝试使用 Cocoa 框架*创建使用 RGBA 调色板(每个调色板条目 32 位)的 调色板 PNG 图像(每像素 8 位)。
我尝试了 [NSBitmapImageRep initWithBitmapDataPlanes:…]
方法的几种组合。它似乎为 bitsPerSample:2
bitsPerPixel:8
创建了适当的位图。
然而,当我尝试使用 [NSBitmapImageReprepresentationUsingType:NSPNGFileType...]
编写这样的位图时,我得到:
libpng error: Invalid bit depth for RGBA image
如果我尝试其他位深度,那么我会得到每像素 32 位(非调色板)图像。
*)我知道我可以只使用 libpng
,但这不是我正在寻找的答案。
I'm trying to create paletted PNG image (8-bit per pixel) that uses RGBA palette (32-bit per palette entry) using Cocoa framework*.
I've tried few combinations for [NSBitmapImageRep initWithBitmapDataPlanes:…]
method. It seems to create appropriate bitmap for bitsPerSample:2
bitsPerPixel:8
.
However, when I try to write such bitmap with [NSBitmapImageRep representationUsingType:NSPNGFileType…]
I get:
libpng error: Invalid bit depth for RGBA image
If I try other bit depths, then I get 32-bit per pixel (non-paletted) image.
*) I know I could just use libpng
, but that's not an answer I'm looking for.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
每个样本 2 位、每个像素 8 位不会为您提供索引的 PNG——理论上,它会创建每个样本 2 位的 RGBA PNG 文件,正如它所建议的那样。现在,这样的图像每个像素有 256 个可能的颜色值(包括 Alpha 通道),但它没有在颜色查找表的意义上进行索引。
据我所知,使用 NSBitmapImageRep 时无法指定调色板。您可能必须直接使用
libpng
才能获得您想要的效果。 (顺便说一句,如果您不寻找这个答案也没关系。它仍然是这个特定问题的正确答案,并且说“不!”不会改变您周围的宇宙。)但是,在之前如果您这样做,如果您告诉我们为什么您认为/知道您需要索引 PNG,我们也许能够为您指出更好或更简单的解决方案。
2 bits per sample, 8 per pixel will not get you an indexed PNG--it will, in theory, create an RGBA PNG file with 2 bits per sample, just as it suggests. Now, such an image has 256 possible colour values per pixel (including alpha channel) but it's not indexed in the sense of having a colour lookup table.
To my knowledge, there is no way to specify a colour palette when using
NSBitmapImageRep
. You will probably have to uselibpng
directly to get the effect you want. (By the way, it doesn't matter if you aren't looking for this answer. It's still the correct answer to this particular problem and saying "no!" isn't going to change the universe around you.)However, before you do that, if you tell us why you think/know you need an indexed PNG, we may be able to point you toward a better or simpler solution.