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を再コンパイルしてから、次の設定を追加しました。
追加のdirsを含める:
c:/imagemagick/magick++/lib;c:/imagemagick/
追加のlibdirs:
c:/imagemagick/visualmagick/lib/
libs:
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を使用しています。同じ設定の他のプロジェクトで機能しなかった理由がわかりません...