0

我似乎找不到从 C++ 中的 iostream stream_buffer 初始化 ImageMagick Magick++ 对象的正确语法/方法的示例。

我正在尝试使用来自 aws sdk getObject 的结果,它似乎返回一个流缓冲区以推送到 ImageMagick 以通过 lambda 按需创建缩略图。

我用来检索对象的 aws-sdk-cpp 中的相关代码示例:

auto get_object_outcome = s3_client.GetObject(object_request);
if (get_object_outcome.IsSuccess())
{
    // Get an Aws::IOStream reference to the retrieved file
    auto &retrieved_file = get_object_outcome.GetResultWithOwnership().GetBody();

    // read the object's contents and write to a file
    std::ofstream output_file(file_name, std::ios::binary);
    output_file << retrieved_file.rdbuf();
    return true;
}
else
{
    auto error = get_object_outcome.GetError();
    std::cout << "ERROR: " << error.GetExceptionName() << ": "
              << error.GetMessage() << std::endl;
    return false;
}

任何帮助表示赞赏 - c++ 新手,所以我还不精通转换更高级的数据格式,例如流/blob/缓冲区。

4

1 回答 1

0

我尝试获取您的检索文件,将其复制到 std::vector 中,创建一个魔法 blob,从 blob 创建一个图像:

// create an empty buffer        
std::vector<char> buffer; 

// file your buffer with the retrieved file
std::copy(istream_iterator(retrieved_file), istream_iterator(), std::back_inserter(buffer));

// create a Magick++ blob with your data
Blob my_blob(buffer.data(), buffer.size());

// create a Magick++ image from your blob
Image image_from_blob(my_blob);
于 2019-09-05T19:12:35.643 回答