【解決方法】この領域の計算から while ループを削除します。


さて、私は私を剥がすのに少し助けが必要です。 問題は簡単なので、できます ほとんど 解決策を視覚化します。 必要なのは、一撃で正しい方向を指すことだけです。

このコード (何を試しましたか?) には while ループは必要ありませんが、存在することを知っているより良い方法が思いつきません。

sizeof_bitmap() 実戦テストされ、実稼働環境で使用されます。 これは、指定されたピクセル形式で特定のサイズ (幅*高さ) のビットマップを保存するのに必要なバイト数を計算します (この場合、ピクセルあたり 2 バイトの 16 ビット カラーを使用しています)。

そのアルゴリズムの変形により、必要なものが得られるはずです。

結果は、以下のビットマップを格納するために必要な合計領域を返す必要があります。 m_buffer_size この例では 32768 です。

現在のコードは機能するため、問題をより深く理解するために使用できますが、効率的ではありません。

前もって感謝します。

私が試したこと:

C++
size_t compute_mem_area() const {
    size_t cur = 0;
    size_t i;
    for(i = 1;i<uint16_t(-1);++i) {
        cur = bitmap_type::sizeof_buffer(size16(i,1));
        if(cur>m_buffer_size) {
            break;
        }
    }
    return i-1;
}
// computes the minimum required size for a bitmap buffer, in bytes
constexpr inline static size_t sizeof_buffer(size16 size) {
    return (size.width*size.height*pixel_type::bit_depth+7)/8;
}

コメント

タイトルとURLをコピーしました