Я попробовал defineSet, и он у меня не сработал, но затем сработало:
image.defineValue("png", "format", "png24");
Моя ситуация немного отличается, поэтому я использую другой спецификатор формата png и значение, в вашем случае здесь должно быть:
u16MagickImg.defineValue("png", "color-type", "0");
u16MagickImg.defineValue("png", "bit-depth", "16");
См. Список спецификаторов формата здесь: http://www.imagemagick.org/script/command-line-options.php#define
См. Информацию о значении методов defineValue и defineSet класса Image здесь: http://www.imagemagick.org/Magick++/Image.html
Цитаты оттуда:
defineValue: "Установить или получить строку определения, применяемую при кодировании или декодировании указанного формата. Значения определений зависят от формата. Формат определяется аргументом magick_, формат-специфический ключ обозначается как key_, а соответствующее значение указывается значением value_. См. метод defineSet (), если ключ должен быть полностью удален."defineSet:" Установите или получите флаг определения, применяемый прикодирование или декодирование указанного формата. Аналогичен методу defineValue (), за исключением того, что передача значения flag_ true 'создает значение-less определите с этим форматом и ключом.Передача значения flag_ 'false' удаляет все существующие определения соответствия.Метод возвращает «true», если соответствующий ключ существует, и «false», если соответствующий ключ не существует. "
Также некоторая важная информация из исходного файла png.c: если изображение не может быть записано без потерь сзапрошенная битовая глубина и цветовой тип, файл PNG не будет записан, будет выдано предупреждение, и кодер вернет MagickFalse.
Я не эксперт и не уверен, что он будет работать вВаш конкретный случай, но приведенный выше код действительно работает для меня в OS X ImageMagick 10.6.9.
Надеюсь, это поможет.