2014-08-27 2 views
0

Я пытаюсь написать код, чтобы преобразовать файл аннотации 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 обратно в изображение он должен быть загружен в окно с изображениями. Вышеприведенные примеры кода будут работать, но только первое изображение в цепочке анимации проходит через него и, следовательно, является единственной частью, если анимация появляется в окне изображения. Мне нужно написать код, который будет обрабатывать всю анимацию. Заранее спасибо!

+0

Этот вопрос может ответить частично: http://stackoverflow.com/questions/8763630/c-sharp-gif-image-to-memorystream-and-back-lose-animation – allen1

+0

Спасибо, Дэн, но мне все еще нужно больше информации. В основном, мне нужно знать, преобразуется ли анимированный GIF в строку base 64 целиком и как передать его целиком в массив байтов или аналогичный тип, прежде чем помещать его в поле изображения. – user2272380

+0

Понял. У меня было ощущение, что пост может объяснить только часть истории, если она вообще есть. Можете ли вы использовать FileStream, чтобы открыть весь файл и поместить его в MemoryStream? Bitmap.FromStream будет преобразовывать его, но FileStream будет читать байты raw. – allen1

ответ

0

я нашел способ решить эту проблему:

byte[] imageByte = Base64.decodeBase64(imageData.getImageBase64()); 
new FileOutputStream("image2.gif"); 
write(imageByte); 
close(); 

Я не знаю почему, но с использованием FileOutput строки я мог бы получить файл с полной анимацией.

Смежные вопросы