2

私は C++ でビットマップ ローダーに取り組んでおり、C スタイルの配列から std::vector に移動するときに、Google が答えを持っていないように見える通常の問題に遭遇しました。

8 ビットと 4 ビットのビットマップには、カラー パレットが含まれています。カラー パレットには、青、緑、赤、および予約済みの各コンポーネントがあり、サイズはそれぞれ 1 バイトです。

// Colour palette     
struct BGRQuad
{
     UInt8 blue; 
     UInt8 green; 
     UInt8 red; 
     UInt8 reserved; 
};

私が抱えている問題は、BGRQuad 構造のベクトルを作成するときに、ifstream 読み取り関数を使用してファイルから直接 BGRQuad ベクトルにデータをロードできないことです。

// This code throws an assert failure!
std::vector<BGRQuad> quads;
if (coloursUsed) // colour table available
{   // read in the colours
    quads.reserve(coloursUsed);
    inFile.read( reinterpret_cast<char*>(&quads[0]), coloursUsed * sizeof(BGRQuad) ); 
}

C配列を作成してデータをBGRQuadベクターにコピーすることなく、ベクターに直接読み込む方法を知っている人はいますか?

4

1 に答える 1

3

quads.resize(coloursUsed)の代わりに使用する必要がありますquads.reserve(coloursUsed)。Reserve はベクター オブジェクトの容量を設定するだけで、メモリを割り当てません。サイズを変更すると、実際にメモリが割り当てられます。

于 2010-05-12T16:17:56.210 に答える