Я пытаюсь написать код, чтобы преобразовать файл аннотации GIF в строку base64, а затем преобразовать его из строки базы 64 обратно в изображение. Код, который я написал, предназначен для стандартных файлов изображений (например, Bitmap, JPEG, GIF). Анимированные GIF-файлы, однако, различны и, очевидно, требуют поэтапного подхода.Как преобразовать анимацию GIF в строку Base64 и вернуться в анимацию GIF?
Вот код, который я написал для преобразования изображения в base64 строку:
if (pbTitlePageImage.Image != null)
{
// This is the step-by-step for writing an image to binary.
string Image2BConverted;
using (Bitmap bm = new Bitmap(pbTitlePageImage.Image))
{
using (MemoryStream ms = new MemoryStream())
{
BinaryWriter bw = new BinaryWriter(ms);
bm.Save(ms, ImageFormat.Jpeg);
Image2BConverted = Convert.ToBase64String(ms.ToArray());
GameInfo.TitlePageImage = Image2BConverted;
bw.Close();
ms.Close();
GameInfo.TitlePageImagePresent = true;
ProjectNeedsSaving = true;
}
}
}
А вот код, который я написал для преобразования строки base64 обратно к изображению:
{
byte[] TitlePageImageBuffer = Convert.FromBase64String(GameInfo.TitlePageImage);
MemoryStream memTitlePageImageStream = new MemoryStream(TitlePageImageBuffer, 0, TitlePageImageBuffer.Length);
memTitlePageImageStream.Write(TitlePageImageBuffer, 0, TitlePageImageBuffer.Length);
memTitlePageImageStream.Position = 0;
pbTitlePageImage.Image = Bitmap.FromStream(memTitlePageImageStream, true);
memTitlePageImageStream.Close();
memTitlePageImageStream = null;
TitlePageImageBuffer = null;
}
После преобразования строки base64 обратно в изображение он должен быть загружен в окно с изображениями. Вышеприведенные примеры кода будут работать, но только первое изображение в цепочке анимации проходит через него и, следовательно, является единственной частью, если анимация появляется в окне изображения. Мне нужно написать код, который будет обрабатывать всю анимацию. Заранее спасибо!
Этот вопрос может ответить частично: http://stackoverflow.com/questions/8763630/c-sharp-gif-image-to-memorystream-and-back-lose-animation – allen1
Спасибо, Дэн, но мне все еще нужно больше информации. В основном, мне нужно знать, преобразуется ли анимированный GIF в строку base 64 целиком и как передать его целиком в массив байтов или аналогичный тип, прежде чем помещать его в поле изображения. – user2272380
Понял. У меня было ощущение, что пост может объяснить только часть истории, если она вообще есть. Можете ли вы использовать FileStream, чтобы открыть весь файл и поместить его в MemoryStream? Bitmap.FromStream будет преобразовывать его, но FileStream будет читать байты raw. – allen1