我在使用 ImageMagick 的 C++ API Magick++ 创建具有 JPEG 压缩的 TIFF 图像时遇到问题。当我按以下方式使用转换工具时,它可以工作:
convert 1.jpg -compress JPEG 1.tiff
当我想在 C++ 中做同样的事情时,它看起来像这样:
Image img("1.jpg");
img.compressType(JPEGCompression);
img.write("1.tiff");
但是这段代码不起作用。它在尝试生成文件“1.tiff”时抛出异常:
Unhandled exception at 0x74ecb727 in test.exe: Microsoft C++ exception: Magick::ErrorCoder at memory location 0x002ffc2c..
它指向文件Thread.cpp中的第 103 行
这是一个错误还是我的代码有问题?
更新
我将代码更改为:
try{
Image img(Desktop+"1.jpg");
img.compressType(JPEGCompression);
img.write(Desktop+"1.tiff");
}catch(Exception e){
cout << e.what() << endl;
}
输出:test.exe:CompressionNotSupported `JPEG'@error/tiff.c/WriteTIFFImage/2611
所以......它似乎不受支持。问题是:那他为什么要转换工具支持呢?有人知道怎么做吗?
更新
我创建了一个空的新项目,重新编译了 ImageMagick,然后添加了以下设置:
其他包括目录:
c:/imagemagick/magick++/lib;c:/imagemagick/
额外的库目录:
c:/imagemagick/visualmagick/lib/
库:
CORE_RL_bzlib_.lib;CORE_RL_coders_.lib;CORE_RL_filters_.lib;CORE_RL_jbig_.lib;CORE_RL_jp2_.lib;CORE_RL_jpeg_.lib;CORE_RL_lcms_.lib;CORE_RL_libxml_.lib;CORE_RL_magick_.lib;CORE_RL_Magick++_.lib;CORE_RL_png_.lib;CORE_RL_tiff_.lib;CORE_RL_ttf_.lib;CORE_RL_wand_.lib;CORE_RL_xlib_.lib;CORE_RL_zlib_.lib;CORE_RL_wmf_.lib;X11.lib;Xext.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;wsock32.lib;winmm.lib;
然后尝试运行以下代码:
#include <iostream>
#include <Magick++.h>
using namespace std;
using namespace Magick;
int main() {
Image img("c:/users/patrik stutz/Desktop/1.jpg");
img.compressType(JPEGCompression);
img.write("c:/users/patrik stutz/Desktop/1.tiff");
return 0;
}
它奏效了!!全部使用VS2010。我不知道为什么它在具有相同设置的其他项目中不起作用...