【问题标题】:Create and write paletted RGBA PNG using NSImage使用 NSImage 创建和编写调色板 RGBA PNG
【发布时间】:2011-06-22 10:19:06
【问题描述】:

我正在尝试使用 Cocoa 框架*创建使用 RGBA 调色板(每个调色板条目 32 位)的 调色板 PNG 图像(每像素 8 位)。

我尝试了几种[NSBitmapImageRep initWithBitmapDataPlanes:…] 方法的组合。它似乎为bitsPerSample:2 bitsPerPixel:8 创建了适当的位图。

但是,当我尝试使用 [NSBitmapImageRep representationUsingType:NSPNGFileType…] 编写这样的位图时,我得到:

libpng error: Invalid bit depth for RGBA image

如果我尝试其他位深度,则会得到每像素 32 位(非调色板)的图像。


*) 我知道我可以使用 libpng,但这不是我要寻找的答案。

【问题讨论】:

    标签: cocoa nsimage rgba nsimagerep png-8


    【解决方案1】:

    每个样本 2 位,每个像素 8 位不会为您提供索引 PNG——理论上,它会创建一个每个样本 2 位的 RGBA PNG 文件,正如它所建议的那样。现在,这样的图像每个像素(包括 Alpha 通道)有 256 个可能的颜色值,但在颜色查找表的意义上它没有索引。

    据我所知,使用NSBitmapImageRep 时无法指定调色板。您可能必须直接使用libpng 才能获得您想要的效果。 (顺便说一句,如果你不寻找这个答案也没关系。它仍然是这个特定问题的正确答案,说“不!”不会改变你周围的宇宙。)

    但是,在您这样做之前,如果您告诉我们为什么您认为/知道您需要索引 PNG,我们可能会为您指明更好或更简单的解决方案。

    【讨论】:

    • 是的,但这是针对 GIF 文件,而不是 PNG 文件。它们是不同的动物。
    • 有一种方法可以指定调色板——它需要NSImageRGBColorTable 属性。我在 somewhere 找到了 2-bps 技巧,它解释了如何让 GIF 输出正常工作(尽管它可能是错误的——那么 GIF 的正确设置是什么?)。
    • 我知道 PNG != GIF。我的观点是这个类支持调色板——GIF 支持证明了这一点。
    • 它支持它们仅适用于 GIF 文件。它不支持编写索引的 PNG 文件。
    猜你喜欢
    • 2016-09-15
    • 1970-01-01
    • 2013-08-12
    • 1970-01-01
    • 2021-04-23
    • 2013-07-02
    • 2018-01-19
    • 2021-08-30
    • 1970-01-01
    相关资源
    最近更新 更多