Como posso criar uma imagem no GDI + a partir de uma string codificada em Base64 em C ++?
Eu tenho um aplicativo, atualmente escrito em C #, que pode pegar uma string codificada em Base64 e transformá-la em uma imagem (uma imagem TIFF nesse caso) e vice-versa. Em C #, isso é realmente muito simples.
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);
(e, agora que estou vendo, pode ser ainda mais simplificado)
Agora tenho uma necessidade comercial de fazer isso em C ++. Estou usando o GDI + para desenhar os gráficos (somente o Windows até agora) e já tenho código paradecodificar a string em C ++ (para outra string). O que eu estou pensando, no entanto, é colocar as informações em um objeto Image no GDI +.
Neste ponto, eu acho que preciso
a) Uma maneira de converter essa sequência decodificada em Base64 em um IStream para alimentar a função FromStream do objeto Image
b) Uma maneira de converter a string codificada em Base64 em um IStream para alimentar a função FromStream do objeto Image (portanto, código diferente do que estou usando no momento)
c) De alguma maneira completamente diferente em que não estou pensando aqui.
Minhas habilidades em C ++ sãomuito enferrujado e também sou mimado pela plataforma .NET gerenciada, por isso, se estou atacando tudo errado, estou aberto a sugestões.
ATUALIZAR: Além da solução que eu postei abaixo, eu também descobri comová para o outro lado se alguém precisar.