Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 使用NSImage创建和写入调色板RGBA PNG_Cocoa_Nsimage_Rgba_Nsimagerep_Png 8 - Fatal编程技术网

Cocoa 使用NSImage创建和写入调色板RGBA PNG

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

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

我为
[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文件。