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.

questionAnswers(2)

yourAnswerToTheQuestion