0

Magick++ ライブラリを使用して、生のピクセル データから RGBA PNG に画像をエクスポートしようとしています。

ただし、実行しようとすると奇妙なエラーが発生します。

terminate called after throwing an instance of 'Magick::ErrorCorruptImage'
  what():  test: unexpected end-of-file `': No such file or directory @ error/rgb.c/ReadRGBImage/229
Aborted

これは関連するコード部分です (ピクセル ベクトルの塗りつぶしを省略しましたが、何も変わりません)。

#include <iostream>
#include <vector>
#include <ImageMagick/Magick++.h>

using namespace std;

int main(int argc, char *argv[]) {
    Magick::InitializeMagick(*argv);
    int rres, ires;
    cin >> rres >> ires;
    //RGBA
    //rres: horiz. resolution, ires: vert. resolution
    vector<unsigned char> image(rres * ires * 4);
    Magick::Blob blob(&image[0], rres*ires*4);
    Magick::Image img;
    img.size(to_string(rres) + "x" + to_string(ires));
    img.magick("RGBA");
    img.read(blob);
    img.write("out.png");
}

コンパイル:

g++ --std=c++11 -O0 -g3 -ggdb3 -D_GLIBCXX_DEBUG -Wall test.cpp -o test `Magick++-config --cppflags --cxxflags --ldflags --libs`
4

1 に答える 1

1

Q8バージョンのImageMagickを使用している場合、あなたの例は機能します。しかし、ImageMagick の Q16 バージョンを使用しているようです。後者は、ピクセル チャネルあたり 16 ビットを使用します。わずか 8 ビットのvector<unsigned char>を使用しています。vector<unsigned short>に切り替えるか、現在のサイズの 2 倍のvector<unsigned char>を使用することをお勧めします。ピクセル チャネルあたり 16 ビットが必要ない場合は、ImageMagick の Q8 バージョンに切り替えることもできます。

于 2015-03-29T07:53:52.707 に答える