Create and write paletted RGBA PNG using NSImage

99封情书 提交于 2019-12-01 12:43:47

问题


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.


回答1:


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 use libpng 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.



来源:https://stackoverflow.com/questions/4916380/create-and-write-paletted-rgba-png-using-nsimage

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!