【问题标题】:Convert Byte Array to Bitmap Object in wpf在 wpf 中将字节数组转换为位图对象
【发布时间】:2014-11-12 19:52:14
【问题描述】:

我想将字节数组转换为位图。我从采集卡中得到这个字节数组。包含此数组的 RGB24 数据。当我将此数组转换为位图对象时,出现“参数无效”错误。

这是我的字节数组 myByteArray{byte[921600]}

MemoryStream mStream = new MemoryStream(myByteArray);
Bitmap bi = new Bitmap(mStream );

using (MemoryStream mStream = new MemoryStream(myByteArray))
{
Bitmap bi = (Bitmap)System.Drawing.Image.FromStream(mStream );
}

using (MemoryStream mStream = new MemoryStream())
{
mStream.Write(myByteArray, 0, myByteArray.Length);
mStream.Seek(0, SeekOrigin.Begin);

Bitmap bm = new Bitmap(mStream);
return bm;
}

这是因为数组的大小而发生的吗? 任何人都可以提供一种方法来完成这项任务吗? 将不胜感激。

谢谢

【问题讨论】:

  • 你如何得到你的数组?
  • 我怀疑myByteArray 既不是System.Drawing.Image 也不是System.Drawing.Bitmap。你必须把它转换成一个。
  • myByteArray{byte[921600]} 不是有效的 C#。您实际的byte[] 初始化是什么? System.Drawing.Image 中没有 FromImage() 方法。如果您显示无效代码,您只会得到无用的答案。
  • 我是通过采集卡回调函数得到这个数组的。这是我使用的方法。 public static int ShowPIP(VIDEO_SAMPLE_INFO VideoInfo, IntPtr ptData, int lLength, long tRefTime, int lUserData) { byte[] bData = new byte[lLength]; Marshal.Copy(ptData, bData, 0, lLength); m_ShowPipForm.ShowPIP(VideoInfo, myByteArray); return 1; }

标签: c# winforms bitmap bytearray


【解决方案1】:

如果您的 myByteArray 是原始图像数据,这应该可以:

Bitmap bmp = null;
unsafe
{
    fixed (byte* p = myByteArray)
    {
        IntPtr unmanagedPointer = (IntPtr)p;

        // Deduced from your buffer size
        int width = 640;
        int height = 480;
        bmp = new Bitmap(width, height, width * 3, System.Drawing.Imaging.PixelFormat.Format24bppRgb, unmanagedPointer);
    }
}

【讨论】:

  • 非常感谢先生。这是工作正常。但是当显示图像时,图像是上下颠倒的。
  • 我使用了bmp.RotateFlip(RotateFlipType.Rotate180FlipNone);,现在我工作正常。谢谢
  • 我认为你可以使用负步幅来做到这一点(构造函数的第三个参数):-(width * 3)
猜你喜欢
  • 2018-05-06
  • 1970-01-01
  • 2010-09-26
  • 1970-01-01
  • 2013-01-14
  • 2013-07-29
  • 2012-11-09
相关资源
最近更新 更多