gpt4 book ai didi

c++ - 如何从 C++ 中的 Base64 编码字符串在 GDI+ 中创建图像?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:03:15 32 4
gpt4 key购买 nike

我有一个应用程序,目前是用 C# 编写的,它可以采用 Base64 编码的字符串并将其转换为图像(在本例中为 TIFF 图像),反之亦然。在 C# 中,这实际上非常简单。

    private byte[] ImageToByteArray(Image img)
{
MemoryStream ms = new MemoryStream();
img.Save(ms, System.Drawing.Imaging.ImageFormat.Tiff);
return ms.ToArray();
}

private Image byteArrayToImage(byte[] byteArrayIn)
{
MemoryStream ms = new MemoryStream(byteArrayIn);
BinaryWriter bw = new BinaryWriter(ms);
bw.Write(byteArrayIn);
Image returnImage = Image.FromStream(ms, true, false);
return returnImage;
}

// Convert Image into string
byte[] imagebytes = ImageToByteArray(anImage);
string Base64EncodedStringImage = Convert.ToBase64String(imagebytes);

// Convert string into Image
byte[] imagebytes = Convert.FromBase64String(Base64EncodedStringImage);
Image anImage = byteArrayToImage(imagebytes);

(而且,现在我正在研究它,可以进一步简化)

我现在有一个业务需要用 C++ 来做这件事。我正在使用 GDI+ 绘制图形(目前仅限 Windows)并且我已经有了 decode 的代码C++ 中的字符串(到另一个字符串)。然而,我遇到的问题是将信息获取到 GDI+ 中的 Image 对象中。

在这一点上我想我需要一个

a) 一种将 Base64 解码字符串转换为 IStream 以提供给 Image 对象的 FromStream 函数的方法

b) 一种将 Base64 编码的字符串转换为 IStream 以提供给 Image 对象的 FromStream 函数的方法(因此,与我当前使用的代码不同)

c) 我在这里没有想到的一些完全不同的方式。

我的 C++ 技能非常生疏,而且我也被托管的 .NET 平台宠坏了,所以如果我攻击这一切都是错误的,我愿意接受建议。

更新:除了我在下面发布的解决方案之外,我还想出了如何 go the other way如果有人需要的话。

最佳答案

好的,使用我链接的 Base64 解码器的信息和 Ben Straub 链接的示例,我让它工作了

using namespace Gdiplus; // Using GDI+

Graphics graphics(hdc); // Get this however you get this

std::string encodedImage = "<Your Base64 Encoded String goes here>";

std::string decodedImage = base64_decode(encodedImage); // using the base64
// library I linked

DWORD imageSize = decodedImage.length();
HGLOBAL hMem = ::GlobalAlloc(GMEM_MOVEABLE, imageSize);
LPVOID pImage = ::GlobalLock(hMem);
memcpy(pImage, decodedImage.c_str(), imageSize);

IStream* pStream = NULL;
::CreateStreamOnHGlobal(hMem, FALSE, &pStream);

Image image(pStream);

graphics.DrawImage(&image, destRect);

pStream->Release();
GlobalUnlock(hMem);
GlobalFree(hMem);

我确信它可以得到很大改进,但它确实有效。

关于c++ - 如何从 C++ 中的 Base64 编码字符串在 GDI+ 中创建图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2746855/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com