2017-12-12 10 views
0

空白の黒いイメージを作成し、各ピクセルを赤に変更してそのイメージに書き込もうとします。ImageMagick C++バージョン7空白イメージのピクセル値を変更します

Magick::Image image(Magick::Geometry(1024, 1024), 
Magick::Color(std::uint8_t(0), std::uint8_t(0), std::uint8_t(0))); 
assert(image.channels() == 3 && "Created wrong image format."); 
image.type(Magick::TrueColorType); 
image.fillColor("black"); 
std::size_t w = image.columns(); 
std::size_t h = image.rows(); 
assert(image.columns() == 1024 && image.rows() == 1024); 
Magick::Quantum *mpixels = image.setPixels(0, 0, w, h); 
for (int row = 0; row < h - 1; ++row) { 
    for (int col = 0; col < w - 1; ++col) { 
    std::size_t offset = (w * row + col); 
    std::size_t moffset = image.channels() * offset; 
    mpixels[moffset + 0] = 255; 
    mpixels[moffset + 1] = 0; 
    mpixels[moffset + 2] = 0; 
    } 
} 
image.syncPixels(); 
image.write(out.c_str()); 

しかし、画像を検査した後では、画素値を変更した後もまだ画像はすべて黒です。ピクセル値を変更するには何を変更する必要がありますか?

答えて

2

Q16バージョンのImageMagickを使用していると思われます。これは、各ピクセルチャネルの値が0-65535の範囲にあり、本当に黒に近い赤のチャネルに255を使用していることを意味します。私は次のようにあなたの問題を解決すると思う:

mpixels[moffset + 0] = 65535;

ます。また、範囲0-255でチャンネルがあなたのために十分であろう場合はImageMagickのQ8バージョンに切り替えることを決めることができました。

+0

バイナリを見ると、それはQ16です。 Q16からQ8への変換関数はありますか?そうでなければ私は自分自身を書くことができます。 –

+0

8ビットのものから16ビットのピクセル値を生成する正確な計算は、コンテキストによって少し異なりますが、一般に257を掛け算するのがあなたの望みです。これは線形に255から65535までと0から0までをマップします。 –

+1

'MagickCore/magick-type.h'で定義された' QuantumRange'を使用してください。 – emcconville

関連する問題