2012-06-05 116 views
3

我有这样的:类型转换器转换成字节[]为位图

byte[] ar = new byte[ArrayAnsammlung[DurchLaeufer].Length]; 
ArrayAnsammlung[DurchLaeufer].CopyTo(ar, 0); 
TypeConverter tc = TypeDescriptor.GetConverter(typeof(Bitmap)); 
try 
{ 
    bild = (Bitmap)tc.ConvertFrom(ar); 
} 
catch (Exception ddd) 
{ 
    Console.WriteLine(ddd.ToString()); 
} 

AR包括位图数据,即蓝 - 绿 - 红 - 阿尔法蓝....

我试图转换它进入Bitmap bild。这是控制台显示的内容:

A first chance exception of type 'System.ArgumentException' occurred in System.Drawing.dll 
System.ArgumentException: Invalid Parameter. 
    at System.Drawing.Image.FromStream(Stream stream, Boolean useEmbeddedColorManagement, Boolean validateImageData) 
    at System.Drawing.ImageConverter.ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, Object value) 
    at System.ComponentModel.TypeConverter.ConvertFrom(Object value) 
    at SK.MainWindow.thread() in MainWindow.xaml.cs:Zeile 523. 

如何解决此问题?

回答

0

试试这个:

public static Bitmap BytesToBitmap(byte[] byteArray) 
{ 
    using (MemoryStream ms = new MemoryStream(byteArray)) 
    { 
     Bitmap img = (Bitmap)Image.FromStream(ms); 
     return img; 
    } 
} 
+0

System.ArgumentException:无效的参数。 (Stream stream,Boolean useEmbeddedColorManagement,Boolean validateImageData) at System.Drawing.Image.FromStream(Stream stream) at MainWindow.xaml中的SK.MainWindow.BytesToBitmap(Byte [] byteArray) 。 CS:Zeile 571. – Zurechtweiser

+0

同样的例外,对吧?! –

+0

是................ – Zurechtweiser

0

我不知道为什么TypeConverter不工作,但你可以用Bitmap类的构造函数流很容易地做到这一点:

var memoryStream = new MemoryStream(ar) 
var bild = new Bitmap(memoryStream); 

注根据MSDNmemoryStream必须在对象的整个生命周期内保持活跃状态​​。

+0

System.ArgumentException:无效的参数。 at System.Drawing.Bitmap..ctor(Stream stream) at SK.MainWindow.thread()...... – Zurechtweiser

+0

我在猜测你的byte []不是有效的Bitmap。 –

+0

好吧,我发现字节数组是Bgr32和Bild需要Format24bppRgb。如何将Bgr32字节数组转换为Format24bppRgb字节数组? – Zurechtweiser