2016-12-18 6 views
0

У меня есть небольшая проблема для преобразования байтового массива в Bitmap. Вот мое исключение:C# Byte to Image ArgumentOutOfRangeException

Необработанное исключение типа 'System.ArgumentOutOfRangeException' произошло в mscorlib.dll

Мой код:

public static System.Drawing.Bitmap ByteToImage(byte[] data) 
{ 
    System.Drawing.Bitmap bmp; 
    using (var ms = new MemoryStream(data)) 
    { 
     bmp = new System.Drawing.Bitmap(ms); 
    } 
    return bmp; 
} 

Bitmap b = ByteToImage(editor1.system.Tiles[0].ImageData); 
Form f = new Form(); 
f.BackgroundImage = b; 
f.Show(); 

нужно загрузить упорядоченный байт массив в списке и конвертировать в изображение во время выполнения.

Если я сохранить растровые

b.Save(@"C:\test.png"); 

Это работает, если я пытаюсь загрузить растровое изображение во время выполнения я получаю эту ошибку.

+0

Как получить свои байты? Вы этого не показали. – Happypig375

+0

Что такое editor1? Что такое система? – Happypig375

+0

@ Happypig375 editor1 - это мой userControl, система - это библиотека для сериализации всего элемента, содержит список, структуру и многое другое. –

ответ

1

Используйте приведенный ниже код, он решит вашу проблему.

public static Image FormatImage(Image img, int outputWidth, int outputHeight) 
    { 

     Bitmap outputImage =null; 
     Graphics graphics = null; 
     try 
     { 
      outputImage = new Bitmap(outputWidth, outputHeight, System.Drawing.Imaging.PixelFormat.Format16bppRgb555); 
      graphics = Graphics.FromImage(outputImage); 
      graphics.DrawImage(img, new Rectangle(0, 0, outputWidth, outputHeight), 
      new Rectangle(0, 0, img.Width, img.Height), GraphicsUnit.Pixel); 

      return outputImage; 
     } 
     catch (Exception ex) 
     {     
      return img; 
     } 

}