在C++中从流缓冲区初始化 Magick++

Initialize Magick++ from stream buffer in C++

本文关键字:缓冲区 初始化 Magick++ C++      更新时间:2023-10-16

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

我正在尝试使用来自 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/缓冲区。

我尝试获取您的retrieved_file,将其复制到 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);