【问题标题】:Image from manually created byte[]图片来自手动创建的 byte[]
【发布时间】:2013-08-09 10:37:15
【问题描述】:

我想从byte[] 创建一个手动创建的图像,但出现 JIT 错误

System.ArgumentException: Parameter is not valid.
at System.Drawing.Image.FromStream(Stream stream, Boolean useEmbeddedColorManagement, Boolean validateImageData)
   at CreateBitmapFromStream.Form1.Form1_Load(Object sender, EventArgs e) in c:\Data\C#-Workspace\CreateBitmapFromStream\CreateBitmapFromStream\Form1.cs:line 35
   at System.Windows.Forms.Form.OnLoad(EventArgs e)
...

这是我的代码:

private void Form1_Load(object sender, EventArgs e)
{
  var data = new byte[20*10];
  for (int i = 0; i < data.Length; i++)
  {
    if (i < 100)
      data[i] = 0x15;
    else
      data[i] = 0x99;
  }

  using (var ms = new MemoryStream(data))
  {
    var img = Image.FromStream(ms, true, true);  
    panel1.BackgroundImage = img;
  }
}

我做错了什么?

【问题讨论】:

  • 你想达到什么目的?据我所知,Image.FromStream 读取以给定格式(例如:bmp、jpg、png)编码的图像。看起来您正试图通过逐像素写入来创建图像。 0x150x99 的值代表什么?

标签: c# image bytearray memorystream


【解决方案1】:

图像是根据某种格式构建的。

这不仅仅是一个像素序列。如果要绘制像素,使用System.Drawing提供的Bitmap

Bitmap b = new Bitmap(1, 1);
b.SetPixel(0, 0, Color.Gray);

【讨论】:

    【解决方案2】:

    如果你想生成图像,你应该使用 BitmapData 类。使用 BitmapData,您可以将像素数据写入位图/图像。

    这是一个例子: http://msdn.microsoft.com/en-us/library/system.drawing.imaging.bitmapdata.scan0.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-06
      • 1970-01-01
      • 2013-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-27
      相关资源
      最近更新 更多