Cocoa 使用NSImage创建和写入调色板RGBA PNG
我正在尝试使用Cocoa framework*创建使用RGBA调色板(每个调色板条目32位)的调色板PNG图像(每个像素8位) 我为Cocoa 使用NSImage创建和写入调色板RGBA PNG,cocoa,nsimage,rgba,nsimagerep,png-8,Cocoa,Nsimage,Rgba,Nsimagerep,Png 8,我正在尝试使用Cocoa framework*创建使用RGBA调色板(每个调色板条目32位)的调色板PNG图像(每个像素8位) 我为[NSBitmapImageRep initWithBitmapDataPlanes:…]方法尝试了几种组合。它似乎为bitsPerSample:2bitsPerPixel:8创建了合适的位图 但是,当我尝试使用[NSBitmapImageRep representationUsingType:NSPNGFileType…]编写这样的位图时,我得到: libpng
[NSBitmapImageRep initWithBitmapDataPlanes:…]方法尝试了几种组合。它似乎为bitsPerSample:2
bitsPerPixel:8
创建了合适的位图
但是,当我尝试使用[NSBitmapImageRep representationUsingType:NSPNGFileType…]编写这样的位图时,
我得到:
libpng error: Invalid bit depth for RGBA image
如果我尝试其他位深度,那么我会得到每像素32位(非调色板)的图像
*)我知道我可以使用libpng
,但这不是我想要的答案。每个样本2位,每个像素8位不会得到索引PNG——理论上,它会创建一个每个样本2位的RGBA PNG文件,正如它所建议的那样。现在,这样的图像每像素有256个可能的颜色值(包括alpha通道),但它没有索引,因为它有一个颜色查找表
据我所知,在使用NSBitmapImageRep
时,无法指定调色板。您可能需要直接使用libpng
来获得想要的效果。(顺便说一句,如果你不去寻找这个答案,这并不重要。它仍然是这个特定问题的正确答案,说“不”不会改变你周围的宇宙。)
但是,在您这样做之前,如果您告诉我们您认为/知道您需要索引PNG的原因,我们可能会为您提供更好或更简单的解决方案。是的,但这是针对GIF文件的,而不是PNG文件。它们是不同的动物。有一种方法可以指定调色板-它需要NSImageRGBColorTable
属性。我在某个地方发现了2-bps技巧,解释了如何使GIF输出正常工作(尽管可能是错误的-GIF的正确设置是什么?)。我知道PNG!=GIF。我的观点是这个类支持调色板-GIF支持证明了这一点。它只支持GIF文件。它不支持写入索引PNG文件。