8

これが私のコード全体です:

#include "CImg.h"
#include <iostream>

using namespace cimg_library;
int main() {

CImg<float> image(100,100,1,3,0);
const float color[] = {1.0,1.0,0.0};
image.draw_point(50,50,color);
image.save("file.bmp");
CImgDisplay local(image, "Hah");
while (true) {
    local.wait();
    }   

}

これにより、ウィンドウに期待するもの、つまり、50,50に白いピクセルを持つ完全に黒い正方形が正常に表示されます。ただし、file.bmpは、そのピクセルがない単なる黒い四角です(また、何か便利なことを行うより大きなプログラムでdraw_pointを繰り返し呼び出すことで変更されたcimgイメージを保存することも失敗します)。何が起きてる?

4

2 に答える 2

5

問題は、CImgDisplay正規化を有効にして作成することです。したがって、のピクセル{1,1,0}はに正規化さ{255,255,0}れ、画面に表示されます。

CImg.save正規化を実行しないため、ピクセルは非常に暗いピクセルとしてディスクに保存されます。

白いピクセルの色を変更することで、問題を解決できます。

const float color[] = {255.,255.,255.};

そして、オプションで、正規化を無効にすることによって:

CImgDisplay local(image, "Hah", 0);

別の方法として、保存または表示する前に元の画像を正規化することができます。

image.draw_point(50,50,color);
image.normalize(0, 255);
image.save("file.bmp");

参照:

于 2012-04-23T19:43:20.513 に答える
1

私はこのライブラリに精通していませんが、この動作はCImgDisplay、レンダリング時に画像を異なる方法で解釈していることをほのめかします。

const unsigned char color[] = {255,255,255};はビットマップのRGB値を表すように定義されていると思います。

CImg最初のステップとして、ドキュメントを確認します。

于 2012-04-23T18:42:38.827 に答える