已知位图数据,如何显示他??

lizhigang34 2010-03-11 11:16:32
我用VC写了个DLL,主要从网络中读取视频数据,现在我能把数据转换成BMP格式,并且通过回调函数的方法,可以让外部调用者来处理这些数据.我用VC来调用这个DLL时,可以自己构造位图信息头,在窗口上显示出来.如下面的代码:


//回调函数,当收到一帧数据时
void __stdcall fnOnNewFrame(int width, int height, byte *bmpData)
{
BITMAPINFO bmpinfo; //位图信息结构,包含位图信息头和位图颜色信息
//位图信息头结构
bmpinfo.bmiHeader.biSize = sizeof(BITMAPINFO); //本结构所占用的字节数
bmpinfo.bmiHeader.biWidth = width; //位图宽度,以像素为单位
bmpinfo.bmiHeader.biHeight = height; //位图高度,以像素为单位
bmpinfo.bmiHeader.biPlanes = 1; //目标设备的级别,必须为1
bmpinfo.bmiHeader.biBitCount = 32; //每个像素所需的位数,必须为1,4,8,24,32
bmpinfo.bmiHeader.biCompression = 0; //位图压缩类型,必须为0,1,2
bmpinfo.bmiHeader.biSizeImage = width * height; //位图大小,以字节为单位
bmpinfo.bmiHeader.biXPelsPerMeter = 0; //位图水平分辨率,每米像素数
bmpinfo.bmiHeader.biYPelsPerMeter = 0; //位图垂直分辩率,每米象素数
bmpinfo.bmiHeader.biClrUsed = 0; //位图实际使用的颜色表中的颜色数
bmpinfo.bmiHeader.biClrImportant = 0; //位图显示过程中重要的颜色数


CRect rc;
g_pDlg->GetClientRect(&rc);

HDC hdc = ::GetDC(g_pDlg->GetSafeHwnd());

//显示
::SetDIBitsToDevice(
hdc,
0,
0,
rc.Width(),
rc.Height(),
0,
0,
0,
height,
bmpData,
&bmpinfo,
DIB_PAL_COLORS
);

}


请问,在C#里,已知了位图的数据,如何构造Bitmap对象,并显示他??
...全文
104 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhoujk 2010-03-23
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 lizhigang34 的回复:]
引用 7 楼 zhoujk 的回复:
到我的空间去下载一个位图与数组的高速转换函数


哪一篇??给个链接
[/Quote]
http://download.csdn.net/source/971752
xingyuebuyu 2010-03-12
  • 打赏
  • 举报
回复
//width:位图宽,height:位图高,bmpData:位图的数据部分
public delegate void ProcessDelegate(int width, int height,byte[] bmpData);

public void fnOnNewFrame(int width, int height,byte[] bmpData)
{

MemoryStream ms = new MemoryStream(bmpData); //这里bmp的值为0,似乎在回调时,位图数据传输不成功

Image im = Image.FromStream(ms);

this.BackgroundImage = im;
}

上面的没改好
xingyuebuyu 2010-03-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lizhigang34 的回复:]
引用 2 楼 xingyuebuyu 的回复:
byte[] bytes=new byte[1024];
System.IO.MemoryStream ms=new System.IO.MemoryStream(bytes);
Image img = Image.FromStream(ms);

bytes就是你要处理的位图数据.

C#里如何调用这个回调函数呢,下面是我的做法,但提……
[/Quote]


//width:位图宽,height:位图高,bmpData:位图的数据部分
public delegate void ProcessDelegate(int width, int height,byte[] bmpData);

public void fnOnNewFrame(int width, int height,ref byte bmpData)
{

MemoryStream ms = new MemoryStream(bmpData); //这里bmp的值为0,似乎在回调时,位图数据传输不成功

Image im = Image.FromStream(ms);

this.BackgroundImage = im;
}

改用数组试试,你那样就只有1个byte,肯定会有问题
lizhigang34 2010-03-12
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zhoujk 的回复:]
到我的空间去下载一个位图与数组的高速转换函数

[/Quote]
哪一篇??给个链接
zhoujk 2010-03-12
  • 打赏
  • 举报
回复
到我的空间去下载一个位图与数组的高速转换函数
yangquanlaohou 2010-03-12
  • 打赏
  • 举报
回复
学习学习学习学习学习
lizhigang34 2010-03-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 happy20009 的回复:]
好复杂啊。。。看不懂....
[/Quote]
也不是很复杂,我就是想把网络数据传输过程做成DLL,当接收到数据后,把接收到的数据通知调用者,这样调用者就可以自己处理了。很自然的就想到通过回调来实现。

//接收网络数据
byte *pData = ....
//网络数据接收成功后,要通知调用这个DLL的用户
pfnCallBack(int width, int height, pData);

上网查了下,C#里要使用回调,只能通过delegate,所以也就有了我在3楼的代码,但似乎数据在VC与C#间传递不成功。
Z-INDEX 2010-03-12
  • 打赏
  • 举报
回复
好复杂啊。。。看不懂....
lizhigang34 2010-03-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xingyuebuyu 的回复:]
byte[] bytes=new byte[1024];
System.IO.MemoryStream ms=new System.IO.MemoryStream(bytes);
Image img = Image.FromStream(ms);

bytes就是你要处理的位图数据.
[/Quote]
C#里如何调用这个回调函数呢,下面是我的做法,但提示位图数据一直是null

//width:位图宽,height:位图高,bmpData:位图的数据部分
public delegate void ProcessDelegate(int width, int height,ref byte bmpData);

public void fnOnNewFrame(int width, int height,ref byte bmpData)
{

MemoryStream ms = new MemoryStream(bmpData); //这里bmp的值为0,似乎在回调时,位图数据传输不成功

Image im = Image.FromStream(ms);

this.BackgroundImage = im;
}

下面是回调函数的原型:

//回调函数:当有新的视频帧时
typedef void (__stdcall *PFN_ON_NEW_FRAME)(int width, int height, byte *frameData);

我在VC里处理都没问题,位图数据都能正确传输,我甚至已经能把数据保存成一幅位图了。。。
xingyuebuyu 2010-03-11
  • 打赏
  • 举报
回复
byte[] bytes=new byte[1024];
System.IO.MemoryStream ms=new System.IO.MemoryStream(bytes);
Image img = Image.FromStream(ms);

bytes就是你要处理的位图数据.
gisyellow 2010-03-11
  • 打赏
  • 举报
回复
Image.FromXXX方法
actionScript 3.0开发人员指南中文版,总共67章,955页。学习actionScript不错的书籍。 目录: 目录 第章:使用日期和时间 管理日历日期和时间 控制时间间隔 日期和时间示例:简单模拟时钟 第章:使用字符串 字符串基础知识 创建字符串 length属性 处理字符串中的字符 比较字符串 获取其他对象的字符串表示形式 连接字符串 在字符串中查找子字符串和模式 转换字符串的大小写 字符串示例:ASCII图表 第章:使用数组 数组基础知识 索引数组 关联数组 多维数组 克隆数组 扩展Array类 数组示例:播放列表 第章:处理错误 错误处理基础知识 错误类型 ActionScript中的错误处理 使用Flash运行时的调试版 在应用程序中处理同步错误 创建自定义错误类 响应错误事件和状态 比较错误类 处理错误示例:CustomErrors应用程序 第章:使用正则表达式 正则表达式基础知识 正则表达式语法 对字符串使用正则表达式的方法 正则表达式示例:Wiki解析程序 第章:使用XML XML基础知识 用于处理XML的EX方法 XML对象 XMLList对象 初始化XML变量 组合和变换XML对象 遍历XML结构 使用XML命名空间 XML类型转换 读取外部XML文档 在ActionScript中使用XML的示例:从Internet加载RSS数据 第章:使用本机JSON功能 JSONAPI概述 定义自定义JSON行为 第章:处理事件 事件处理基础知识 ActionScript事件处理与早期版本事件处理的不同之处 事件流 事件对象 事件侦听器 事件处理示例:闹钟 第章:使用应用程序域 第章:显示编程 显示编程的基础知识 核心显示显示列表方法的优点 使用显示对象 处理显示对象 对象动画 舞台方向 动态加载显示内容 显示对象示例:SpriteArranger 第章:使用几何结构 几何结构基础知识 使用Point对象 使用Rectangle对象 使用Matrix对象 几何形状示例:对显示对象应用矩阵转换 第章:使用绘图API 绘制API的基础 Graphics类 绘制线条和曲线 使用内置方法绘制形状 创建渐变线条和填充 将Math类与绘制方法配合使用 使用绘图API进行动画处理 绘制API示例:算法可视化生成器 绘图API高级用法 第章:使用位图 位图使用基本知识 Bitmap和BitmapData类 处理像素 复制位图数据 使用杂点功能制作纹理 滚动位图 利用mipmap处理 位图示例:带动画效果的旋转的月亮 位图图像的异步解码 第章:过滤显示对象 过滤显示对象的基础知识 创建和应用滤镜 可用的显示滤镜 筛选显示对象示例:FilterWorkbench 第章:使用PixelBender着色器 PixelBender着色器基础知识 加载或嵌入着色器 访问着色器元数据 指定着色器输入和参数值 使用着色器 第章:使用影片剪辑 影片剪辑基础知识 使用MovieClip对象 控制影片剪辑播放 使用ActionScript创建MovieClip对象 加载外部SWF文件 影片剪辑示例:RuntimeAssetsExplorer 第章:使用补间动画 补间动画基础知识 在Flash中复制补间动画脚本 合并补间动画脚本 描述动画 添加滤镜 将补间动画与其显示对象关联 第章:使用反向运动 反向运动的基础知识 IK骨架动画处理概述 获取有关IK骨架的信息 实例化IKMover并限制其移动 移动IK骨架 使用弹簧 使用IK事件 第章:在三维(D)环境中工作 D显示对象的基础知识 了解FlashPlayer和AIR运行时中的D显示对象 创建和移动D显示对象 将D对象投影到D视图上 示例:透视投影 执行复杂的D转换 通过三角形获得D效果 第章:文本使用基础知识 第章:使用TextField类 显示文本 选择和操作文本 捕获文本输入 限制文本输入 设置文本格式 高级文本呈现 使用静态文本 TextField示例:报纸风格的文本格式设置 第章:使用Flash文本引擎 创建和显示文本 处理FTE中的事件 设置文本格式 使用字体 控制文本 Flash文本引擎示例:新闻版面布局 第章:使用TextLayoutFramework TextLayoutFramework概述 使用TextLayoutFramework 使用TLF构建文本结构 使用TLF设置文本格式 使用TLF导入和导出文本 使用TLF管理文本容器 使用TLF启用文本选择、编辑和撤消 使用TLF处理事件 在文本内定位图像 第章:处理声音 声音处理基础知识 了解声音体系结构 加载外部声音文件 处理嵌入的声音 处理声音流文件 处理动态生成的音频 播放声音 加载和播放声音时的安全注意事项 控制音量和声相 处理声音元数据 访问原始声音数据 捕获声音输入 声音示例:PodcastPlayer 第章:使用视频 视频基础知识 了解视频格式 了解Video类 加载视频文件 控制视频播放 在全屏模式下播放视频 流式传输视频文件 了解提示点 编写元数据和提示点的回调方法 使用提示点和元数据 监控NetStream活动 视频文件的高级主题 视频示例:视频自动唱片点唱机 使用StageVideo类来实现硬件加速呈现 第章:使用摄像头 了解Camera类 在屏幕上显示摄像头内容 设计摄像头应用程序 连接至用户的摄像头 验证是否已安装摄像头 检测摄像头的访问权限 最优化摄像头视频品质 监控摄像头状态 第章:使用数字权限管理 了解受保护的内容工作流程 NetStream类中与DRM相关的成员和事件 使用DRMStatusEvent类 使用DRMAuthenticateEvent类 使用DRMErrorEvent类 使用DRMManager类 使用DRMContentData类 更新FlashPlayer以支持FlashAccess 带外许可证 域支持 使用域支持播放加密的内容 许可证预览 提交内容 OpenSourceMediaFramework 第章:在AIR中添加PDF内容 检测PDF功能 加载PDF内容 编写PDF内容的脚本 对AIR中的PDF内容的已知限制 第章:用户交互的基础知识 捕获用户输入 管理焦点 了解输入类型 第章:键盘输入 捕获键盘输入 使用IME类 虚拟键盘 第章:鼠标输入 捕获鼠标输入 鼠标输入示例:WordSearch 第章:触摸、多点触控和手势输入 触摸输入的基础知识 触摸支持发现 Touch事件处理 触摸和拖动 Gesture事件处理 疑难解答 第章:复制和粘贴 复制粘贴基础知识 读取和写入系统剪贴板 AIR中的HTML复制和粘贴 剪贴板数据格式 第章:加速器输入 检查加速计支持 检测加速计更改 第章:AIR中的拖放 AIR中拖放的基础知识 支持拖出手势 支持拖入手势 HTML中的拖放 将数据拖出HTML元素 将数据拖入HTML元素 示例:覆盖默认的HTML拖入行为 在非应用程序HTML沙箱中处理文件放置 放置文件释放 第章:使用菜单 菜单基础知识 创建本机菜单(AIR) 关于HTML中的上下文菜单(AIR) 显示弹出本机菜单(AIR) 处理菜单事件 本机菜单示例:窗口和应用程序菜单(AIR) 第章:AIR中的任务栏图标 关于任务栏图标 停靠栏图标 系统任务栏图标 Window任务栏图标和按钮 第章:使用文件系统 使用FileReference类 使用AIR文件系统API 第章:存储本地数据 共享对象 加密的本地存储区 第章:在AIR中使用本地SQL数据库 关于本地SQL数据库 创建和修改数据库 操作SQL数据数据 使用同步和异步数据库操作 对SQL数据库使用加密 使用SQL数据库的策略 第章:使用字节数组 读取并写入ByteArray ByteArray示例:读取zip文件 第章:网络和通信基础知识 网络接口 网络连接更改 域名系统(DNS)记录 第章:套接字 TCP套接字 UDP套接字(AIR) IPv地址 第章:HTTP通信 加载外部数据 Web服务请求 在其他应用程序中打开URL 第章:与其他FlashPlayer和AIR实例通信 关于LocalConnection类 在两个应用程序之间发送消息 连接到不同域中的内容和AIR应用程序 第章:与AIR中的本机进程通信 本机进程通信概述 启动和关闭本机进程 与本机进程通信 本机进程通信的安全性注意事项 第章:使用外部API 使用外部API的基础知识 外部API要求和优点 使用ExternalInterface类 外部API示例:在ActionScript和Web浏览器中的JavaScript之间进行通信 第章:AIR中的XML签名验证 XML签名验证的基础知识 关于XML签名 实现IURIDereferencer接口 第章:客户端系统环境 客户端系统环境基础知识 使用System类 使用Capabilities类 功能示例:检测系统功能 第章:AIR应用程序的调用和终止 应用程序调用 捕获命令行参数 用户登录时调用AIR应用程序 从浏览器调用AIR应用程序 应用程序终止 第章:处理AIR运行时和操作系统信息 管理文件关联 获取运行时版本和修补级别 检测AIR功能 跟踪用户当前状态 第章:使用AIR本机窗口 AIR中的本机窗口的基础知识 创建窗口 管理窗口 侦听窗口事件 显示全屏窗口 第章:AIR中的显示屏幕 AIR中的显示屏幕的基础知识 枚举屏幕 第章:打印 打印基础知识 打印页面 Flash运行时任务和系统打印 设置大小、缩放和方向 高级打印技术 打印示例:多页面打印 打印示例:缩放、裁剪和响应 打印示例:页面设置和打印选项 第章:Geolocation 检测geolocation更改 第章:应用程序国际化 应用程序国际化基础知识 flashglobalization包概述 确定区域设置 设置数字格式 设置货币值格式 设置日期和时间格式 排序和比较字符串 大小写转换 示例:国际化股票报价应用程序 第章:本地化应用程序 选择区域设置 本地化Flex内容 本地化Flash内容 本地化AIR应用程序 对日期、时间和货币进行本地化 第章:关于HTML环境 HTML环境概述 AIR和WebKit 第章:在AIR中进行HTML和JavaScript编程 关于HTMLLoader类 避免与安全相关的JavaScript错误 通过JavaScript访问AIRAPI类 关于AIR中的URL 使ActionScript对象可用于JavaScript 从ActionScript访问HTMLDOM和JavaScript对象 在HTML中嵌入SWF内容 在HTML页中使用ActionScript库 转换Date和RegExp对象 从ActionScript操作HTML样式表 跨脚本访问不同安全沙箱中的内容 第章:为AIRHTML容器编写脚本 HTMLLoader对象的显示属性 滚动HTML内容 访问HTML历史记录列表 设置在加载HTML内容时使用的用户代理 设置用于HTML内容的字符编码 为HTML内容定义类似于浏览器的用户界面 创建HTMLLoader类的子类 第章:处理AIR中与HTML相关的事件 HTMLLoader事件 使用ActionScript处理DOM事件 响应未捕获的JavaScript异常 使用JavaScript处理运行时事件 第章:在移动应用程序中显示HTML内容 StageWebView对象 内容 导航事件 历史记录 焦点 位图捕获 第章:安全性 FlashPlatform安全概述 安全沙箱 权限控制 限制网络API 全屏模式安全性 加载内容 跨脚本访问 作为数据访问加载的媒体 加载数据 从导入到安全域的SWF文件加载嵌入内容 使用旧内容 设置LocalConnection权限 控制外出URL访问 共享对象 摄像头、麦克风、剪贴板、鼠标和键盘访问 AIR安全性 第章:如何使用ActionScript示例 示例类型 在FlashProfessional中运行ActionScript示例 在FlashBuilder中运行ActionScript示例 在移动设备上运行ActionScript示例 第章:本地数据库中的SQL支持 支持的SQL语法 数据类型支持 第章:SQL错误详细消息、ID和参数 第章:Adobe图形汇编语言(AGAL) AGAL字节码格式

110,502

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧