当前位置:编程学习 > C#/ASP.NET >>

求教RGB格式图象流的显示

在做一个基于海康player的.net版本.
通过海康API void CALLBACK DecCBFun(long nPort,char * pBuf,long nSize,
   FRAME_INFO *pFrameInfo, 
   long nReserved1,long nReserved2)
取到的图像的帧消息都在char * pBuf里了.
我得思路是在PictureBox中显示,试过Image.FromStream(pbuff)报错:参数不对。
代码如下:using (MemoryStream ms = new MemoryStream())
            {
                ms.Write(byImage,0,byImage.Length );
                lock(this)
                    pictureBox1.Image = Image.FromStream(ms);
                ms.Close();
                ms.Dispose();
            }// end ms
我还查到c++中用stretchDIBits实现显示的,但是c#里这样用比较麻烦.因为有现成的PictureBox啊,不需要这么麻烦吧
谢谢大家指教 --------------------编程问答-------------------- 没用过,路过UP --------------------编程问答-------------------- 路过.StringBuilder可以试一下,把这些数据转化为字符留,然后再做转换.不知道可以不可以? --------------------编程问答-------------------- 学习一下 --------------------编程问答-------------------- 帮顶,没接触过 --------------------编程问答-------------------- 帮顶 没用过 --------------------编程问答-------------------- 这个是你没注意
ms.write()是写入流
ms 初始化的时候没参数
所以byImage应该是byte[],它是空值
而你又没有使用byImage.可以不要这一行。
你用ms.read()试下
如果你有图片,可以直接在初始化MemoryStream 的参数中带入
没有的话就自己用 image bitmap 对象生成你要的图片对象,再带入流 --------------------编程问答-------------------- 我代码没写完整byImage是有定义的,pData,len这些都是通过平台调用从c++lib传过来的,c++lib是用来调用海康API后得到的帧信息数据

  public void Show24Buff(uint nWidth, uint nHeight, IntPtr pData, int len)
        {
            byte[] byImage = new byte[len];
            System.Runtime.InteropServices.Marshal.Copy(pData, byImage, 0, len);
            using (MemoryStream ms = new MemoryStream())
            {
                ms.Write(byImage, 0, byImage.Length);
               // lock (this) 
                pictureBox1.Image = System.Drawing.Image.FromStream(ms);
                ms.Close();
                ms.Dispose();
            }// end ms

        
        } --------------------编程问答-------------------- 我研究了下海康demo,是不是bmp header要自己定义的问题啊
byte[] byImage 里面是不是要加上自己的bmp header信息
mfc里BITMAPINFOHEADER,BITMAPINFO类可以用,c#里这些怎么都没有了啊 --------------------编程问答-------------------- using (MemoryStream ms = new MemoryStream(byImage))
{
ms.Position=0;//你的代码加上这句 应该就可以
    lock(this)
       pictureBox1.Image = Image.FromStream(ms);
}//简简单单写就好 --------------------编程问答-------------------- to cancerser

还是不行,仍然在 System.Drawing.Image.FromStream(ms)处报ms 参数无效 --------------------编程问答-------------------- 写法没什么大问题,会不会是因为你的bytes不是Image.FromStream能自动识别的呢?特有格式? --------------------编程问答-------------------- 是啊,我也怀疑的,所以我在你发言前流过这样的言了.c#里好像没有c++里那些BITMAP设置的类了啊?

我研究了下海康demo,是不是bmp header要自己定义的问题啊
byte[] byImage 里面是不是要加上自己的bmp header信息
mfc里BITMAPINFOHEADER,BITMAPINFO类可以用,c#里这些怎么都没有了啊
--------------------编程问答-------------------- up --------------------编程问答-------------------- 请问各位大虾,这些连续的图像能够保存成视频格式吗?
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,