У меня есть приложение, написанное в настоящее время на 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), и у меня уже есть код для декодирования строки в C ++ (в другую строку). Однако я спотыкаюсь о получении информации в объект Image в GDI +.
На данный момент, я думаю, мне нужно либо
a) Способ преобразования этой строки, декодированной Base64, в IStream для подачи в функцию FromStream объекта Image
b) Способ преобразования строки в кодировке Base64 в IStream для подачи в функцию FromStream объекта Image (так, код, отличный от того, который я сейчас использую)
в) Каким-то совершенно другим способом, о котором я здесь не думаю.
Мои навыки C ++ очень ржавые, и я также избалован управляемой платформой .NET, поэтому, если я атакую все это неправильно, я открыт для предложений.
ОБНОВЛЕНИЕ: В дополнение к решению, которое я опубликовал ниже, я также выяснил, как пойти другим путем , если кому-то это нужно.