0

//解決策: ビット単位の演算子を使用し、sstream を完全に削除します。atoi は 16 進数を適切に受け入れません。//

namespace color_tools{

    std::stringstream sstream;

}

int RGB_256_to_hex(signed short r, signed short g, signed short b){

    std::string hex_col;

    color_tools::sstream << std::hex << r << g << b;

    hex_col = color_tools::sstream.str();

    color_tools::sstream.str("");

    color_tools::sstream.clear();

    return atoi(hex_col.c_str());

}

たとえば、(0,0,255) を渡すと、関数は 0 を返します。青色は 0000ff であるため、これは正しくありません。関数の戻り値の型を文字列に変更して hex_col を返すと、適切な結果が得られます。問題はatoi()にあるに違いないと思いますか?

少し話が逸れましたが、signed short コンポーネントを __int8 型に置き換えることはできますか? これは 256 色のステップに完全に適合するためです。

その他の提案もいただければ幸いです。

4

1 に答える 1