我有一个应用程序,目前是用C#编写的,可以将Base64编码的字符串转换为图像(在这种情况下为TIFF图像),反之亦然。在C#中,这其实非常简单。
(而且,现在看来,甚至可以进一步简化)
我现在有一个在C++中完成这个的业务需求。 我正在使用GDI+绘制图形(目前仅限Windows),我已经有了将字符串解码为另一个字符串的代码。 然而,我遇到的问题是如何将信息传递给GDI+中的Image对象。
此时,我认为我需要:
a)一种将Base64解码后的字符串转换为IStream以提供给Image对象的FromStream函数的方法
b)一种将Base64编码的字符串转换为IStream以提供给Image对象的FromStream函数的方法(因此,与我当前使用的代码不同)
c)我没有考虑到的完全不同的方式。
我的C ++技能非常生疏,而且我也被托管的.NET平台宠坏了,所以如果我攻击这一切的方法都是错的,我愿意听取建议。
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),我已经有了将字符串解码为另一个字符串的代码。 然而,我遇到的问题是如何将信息传递给GDI+中的Image对象。
此时,我认为我需要:
a)一种将Base64解码后的字符串转换为IStream以提供给Image对象的FromStream函数的方法
b)一种将Base64编码的字符串转换为IStream以提供给Image对象的FromStream函数的方法(因此,与我当前使用的代码不同)
c)我没有考虑到的完全不同的方式。
我的C ++技能非常生疏,而且我也被托管的.NET平台宠坏了,所以如果我攻击这一切的方法都是错的,我愿意听取建议。
更新:除了我下面发布的解决方案外,我还找到了一种相反的方法,如果有人需要的话。