3

これが機能しない理由を理解できません。私が知る限り、画像ファイル全体を読み取っているようには見えません...わかりませんが。基本的に、ヒープに読みたい生の画像があります。

unsigned char* ReadImageFromFile(const char* FILENAME, unsigned int SIZE_BYTES)
{
    unsigned char *data = (unsigned char*) malloc(SIZE_BYTES);

    std::ifstream image(FILENAME);
    image.read((char*) data, SIZE_BYTES);
    image.close();

    return data;
}
4

2 に答える 2

6

1) ファイルをバイナリモードで開く

2) 解放する必要がある生のポインタを返さない

std::string readImageFromFile(const char* filename)
{
    std::ifstream image(filename, std::ios::binary);
    std::ostringstream data;
    data << image.rdbuf();
    return data.str();
}

または、エラーが発生しやすいコードを書きたい場合 (組み込みユーザーに人気があるようです)、次のようにすることもできます。

char* readImageFromFile(const char* filename)
{
    std::ifstream image(filename, std::ios::binary);
    std::ostrstream data;
    data << image.rdbuf();
    data.freeze();
    return data.str();
}

もちろん、strstream が推奨されないのには十分な理由があります。

于 2013-07-03T10:20:47.500 に答える
3

試してください(コンストラクターstd::ifstream image(FILENAME, std::ios_base::binary);の 2 番目の引数に注意してください)。ifstream

于 2013-07-03T10:11:50.527 に答える