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());
しかし、画像を検査した後では、画素値を変更した後もまだ画像はすべて黒です。ピクセル値を変更するには何を変更する必要がありますか?
バイナリを見ると、それはQ16です。 Q16からQ8への変換関数はありますか?そうでなければ私は自分自身を書くことができます。 –
8ビットのものから16ビットのピクセル値を生成する正確な計算は、コンテキストによって少し異なりますが、一般に257を掛け算するのがあなたの望みです。これは線形に255から65535までと0から0までをマップします。 –
'MagickCore/magick-type.h'で定義された' QuantumRange'を使用してください。 – emcconville