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();
}

当然,不推荐使用 strstreams 是有充分理由的。

于 2013-07-03T10:20:47.500 回答
3

尝试std::ifstream image(FILENAME, std::ios_base::binary);(注意ifstream构造函数的第二个参数)。

于 2013-07-03T10:11:50.527 回答