首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ImageMagick C++应用编程接口输出16位灰度png?

ImageMagick C++应用编程接口输出16位灰度png?
EN

Stack Overflow用户
提问于 2011-10-11 23:28:25
回答 2查看 2.2K关注 0票数 2

我通过Magick++应用程序接口链接到ImageMagick。我正在尝试获取uint16数据并将其输出为1024x768 1通道16位灰度PNG。我从下面得到的输出是一个RGB8 PNG。除了格式之外,图像内容也是正确的。

代码语言:javascript
复制
gray16_view_t u16view = ...;
uint16_t* data = interleaved_view_get_raw_data(u16view);
size_t length = sizeof(u16) * u16view.width() * u16view.height();
Magick::Blob u16Blob(data, length);
Magick::Geometry size(u16view.width(), u16view.height());
Magick::Image u16MagickImg(u16Blob, size, 16, "GRAY");
u16MagickImg.write("test-16bit.png");

有没有办法指定更多关于输出格式的信息?

这里有一些关于imagemagick的PNG处理的讨论:http://www.imagemagick.org/Usage/formats/#png_formats他们列出了PNG8、PNG24和PNG32作为可用的格式,但下面的部分暗示了

代码语言:javascript
复制
-define png:bit-depth 16 
-define png:color-type=0 

在命令行上将会有所需的输出

EN

回答 2

Stack Overflow用户

发布于 2011-10-12 01:05:47

代码语言:javascript
复制
    u16MagickImg.quality(00);
    u16MagickImg.defineSet("png:color-type", "0");
    u16MagickImg.defineSet("png:bit-depth", "16");
票数 1
EN

Stack Overflow用户

发布于 2014-02-27 16:15:54

我试过defineSet,它对我不起作用,但next起作用了:

代码语言:javascript
复制
image.defineValue("png", "format", "png24");

我的情况有点不同,所以我使用了不同的png格式说明符和值,在你的例子中应该是:

代码语言:javascript
复制
u16MagickImg.defineValue("png", "color-type", "0");
u16MagickImg.defineValue("png", "bit-depth", "16");

请参阅此处的格式说明符列表:http://www.imagemagick.org/script/command-line-options.php#define

有关Image类的defineValue和defineSet方法的含义的信息,请参阅此处:http://www.imagemagick.org/Magick++/Image.html

引述自该网站:

defineValue:“设置或获取指定格式编码或解码时应用的定义字符串。定义的含义是特定于格式的。格式由magick_参数指定,特定于格式的键由key_指定,关联值由value_指定。如果必须完全删除密钥,请参阅defineSet()方法。“defineSet:”设置或获取在编码或解码指定格式时应用的定义标志。与defineValue()方法类似,不同之处在于传递flag_值'true‘会创建使用该格式和键定义的值较少的值。传递flag_值'false‘将删除任何现有的匹配定义。如果存在匹配键,则该方法返回'true‘,如果不存在匹配键,则返回'false’。“

还有一些来自png.c源文件的重要信息:如果图像不能以请求的位深度和颜色类型无损失地写入,则不会写入PNG文件,将发出警告,并且编码器将返回MagickFalse。

我不是专家,也不确定它是否适用于您的特定情况,但上面的代码确实适用于我在OS X ImageMagick 10.6.9上的工作。

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7728550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档