当前位置: 首页 > news >正文

WinCE平台下BMP转JPG代码备份1

这大概是一年前做的事情了,当时的项目要求在WinCE平台下BMP转JPG,然后自己折腾了好几个月才终于搞定,现在时间过去了快一年了,估计自 己今后再也不会碰WinCE相关的东西了吧,而且也准备把相关的学习笔记和代码项目全部删除掉。这些没有经过整理过的东西,放在电脑上也是垃圾,还不如整 理一下,放到网上,让有需要的同学借鉴参考一下吧。

开发环境:VS2005

开发平台:EPC6960 WinCE开发板

主要目标:在WinCE平台下完成BMP图片转JPG

实现方法:使用C++编写转换的DLL文件,使用C#编写界面,然后调用DLL

代码涉及知识点:

1.DLL的创建。

2.函数传入参数,传出参数。

3.位图格式。

4.位图的位运算及格式转换。

5.文件操作。

6.DLL的调用

7.……

一、图片格式转换的DLL项目

//****************************

//**WinCeCppCamDll项目

//**本项目中引用了 开发板公司提供的摄像头驱动DLL文件一个

//****************************

1.1导入和引用DLL中的参数

EpcsCam.h

  1 #pragma once
2
3
4 /*
5 * 对应CAM_IOCTL_SAMSUNG_CAM_PR,打开RGB通道后,从uiRGB_Addr中获取视频图像数据,注意访问uiRGB_Addr时,
6 * 必须采用内核模式(kernel mode),使用函数 SetKMode(TRUE),并在读取uiRGB_Addr后设置flag = 0, 如果有下
7 * 一帧数据来时,底层会将flag设为1,并设置uiRGB_Addr。这样方便读取每一帧数据
8 */
9 typedef struct __PINGPONG_PR
10 {
11 unsigned int uiRGB_Addr;
12 unsigned char flag; /* 为1时候,视频数据有效 */
13 } PINGPONG_PR;
14
15
16 /*
17 * 对应CAM_IOCTL_SAMSUNG_CAM,打开YUV通道后,从uiY_Addr, uiCb_Addr, uiCr_Addr中获取视频图像数据,注意访
18 * 问三个地址时,必须采用内核模式(kernel mode),使用函数 SetKMode(TRUE),并在读取地址数据后设置flag = 0,
19 * 如果有下一帧数据来时,底层会将flag设为1,并设置YUV三个地址值。这样方便读取每一帧数据
20 */
21 typedef struct PINGPONG
22 {
23 unsigned int uiY_Addr;
24 unsigned int uiCb_Addr;
25 unsigned int uiCr_Addr;
26 unsigned char flag;
27 } PINGPONG;
28
29 /*
30 * 此结构体用于设置视频输出图像的大小,视频输出包含两个通道:RGB通道和YUV通道,其中RGB通道为RGB565数据
31 * 格式,视频预览的时候使用RGB通道
32 */
33 typedef struct __IMAGE_SIZE
34 {
35 DWORD dwRGB_Width; /* RGB 通道的输出图像的宽度 */
36 DWORD dwRGB_Height; /* RGB 通道的输出图像的高度 */
37 DWORD dwYUV_Width; /* YUV 通道的输出图像的宽度 */
38 DWORD dwYUV_Height; /* YUV 通道的输出图像的高度 */
39 DWORD dwHorOffset; /* 视频源的水平剪切偏移 */
40 DWORD dwVerOffset; /* 视频源的垂直剪切偏移 */
41 } IMAGE_SIZE;
42
43
44
45 typedef BOOL(*pEpcCamCapture)(BOOL bIsRGB, BOOL bIsYUV);
46 typedef BOOL(*pEpcCamPreviewOn)(DWORD dwXSize, DWORD dwYSize);
47 typedef BOOL(*pEpcCamSetImage)(IMAGE_SIZE* pImageSize);
48 typedef BOOL(*pEpcCamGetRgbFrame)(PINGPONG_PR *prAddInfo);
49
50
51
52 class EpcsCam
53 {
54 public:
55 EpcsCam(void);
56 public:
57 ~EpcsCam(void);
58
59
60 public:
61 HINSTANCE hDLL;//载入DLL的实例句柄
62 char *pBmpData;
63
64 public:
65
66 /*********************************************************************************************************
67 ** Function name: epcCamCapture
68 ** Descriptions: 本函数用于打开或者关闭Camera的视频捕获,如果bIsRGB和bIsYUV为FALSE即为关闭视频捕获,
69 ** bIsRGB和bIsYUV其中任一个为TRUE,即为打开视频捕获
70 ** input parameters: bIsRGB 为TRUE时候打开RGB通道,为FALSE的时候关闭RGB通道
71 ** bIsYUV 为TRUE时候打开YUV通道,为FALSE的时候关闭YUV通道
72 ** output parameters: 无
73 ** Returned value: TRUE:成功;FALSE:失败
74 *********************************************************************************************************/
75
76
77
78
79 /*********************************************************************************************************
80 ** Function name: epcCamPreviewOn
81 ** Descriptions: 本函数用于启动预览图像,当启动视频捕获(打开RGB通道)后, 即可看到图像显示效果
82 ** 建议启动预览时,设置图像的分辨率小于显示屏的分辨率
83 ** 注意,有以下情况将操作失败:1、全屏模式下,2、RGB通道图像设置值大于360*288个象素
84 ** input parameters: dwXSize: 预览图像的X坐标(以LCD的左上角为原点,可以为负值)
85 ** dwYSize: 预览图像的Y坐标(以LCD的左上角为原点,可以为负值)
86 ** output parameters: 无
87 ** Returned value: TRUE:成功;FALSE:失败
88 *********************************************************************************************************/
89
90
91
92
93 /*********************************************************************************************************
94 ** Function name: epcCamSetImage
95 ** Descriptions: 本函数用于设置Camera输出图像的大小, 包含RGB通道和YUV通道的视频输出大小
96 ** 打开该接口驱动后,RGB和YUV图像大小默认为320*240
97 ** 注意,有以下情况将操作失败:1、正在视频捕获,2、打开预览,3,正在全屏模式
98 ** input parameters: pImageSize: 用于设置两个通道的视频输出大小
99 ** output parameters: 无
100 ** Returned value: TRUE:成功;FALSE:失败
101 *********************************************************************************************************/
102
103
104
105 /*********************************************************************************************************
106 ** Function name: epcCamGetRgbFrame
107 ** Descriptions: 本函数用于获取RGB通道的图像的数据缓存区地址
108 ** input parameters: prAddInfo 存放获取的地址,注意访问该地址的图像数据时候使用SetKMode(TRUE)
109 ** output parameters: 无
110 ** Returned value: TRUE:成功;FALSE:失败
111 *********************************************************************************************************/
112
113 BOOL epcCamCapture (BOOL bIsRGB, BOOL bIsYUV);
114 BOOL epcCamPreviewOn (DWORD dwXSize, DWORD dwYSize);
115 BOOL epcCamSetImage (IMAGE_SIZE* pImageSize);
116 BOOL epcCamGetRgbFrame (PINGPONG_PR *prAddInfo);
117
118
119 };
EpcsCam.cpp
 1 #include "StdAfx.h"
2 #include "EpcsCam.h"
3
4 /*********************************************************************************************************
5 ** Function name: epcCamCapture
6 ** Descriptions: 本函数用于打开或者关闭Camera的视频捕获,如果bIsRGB和bIsYUV为FALSE即为关闭视频捕获,
7 ** bIsRGB和bIsYUV其中任一个为TRUE,即为打开视频捕获
8 ** input parameters: bIsRGB 为TRUE时候打开RGB通道,为FALSE的时候关闭RGB通道
9 ** bIsYUV 为TRUE时候打开YUV通道,为FALSE的时候关闭YUV通道
10 ** output parameters: 无
11 ** Returned value: TRUE:成功;FALSE:失败
12 *********************************************************************************************************/
13
14
15
16 /*********************************************************************************************************
17 ** Function name: epcCamPreviewOn
18 ** Descriptions: 本函数用于启动预览图像,当启动视频捕获(打开RGB通道)后, 即可看到图像显示效果
19 ** 建议启动预览时,设置图像的分辨率小于显示屏的分辨率
20 ** 注意,有以下情况将操作失败:1、全屏模式下,2、RGB通道图像设置值大于360*288个象素
21 ** input parameters: dwXSize: 预览图像的X坐标(以LCD的左上角为原点,可以为负值)
22 ** dwYSize: 预览图像的Y坐标(以LCD的左上角为原点,可以为负值)
23 ** output parameters: 无
24 ** Returned value: TRUE:成功;FALSE:失败
25 *********************************************************************************************************/
26
27
28
29
30 /*********************************************************************************************************
31 ** Function name: epcCamSetImage
32 ** Descriptions: 本函数用于设置Camera输出图像的大小, 包含RGB通道和YUV通道的视频输出大小
33 ** 打开该接口驱动后,RGB和YUV图像大小默认为320*240
34 ** 注意,有以下情况将操作失败:1、正在视频捕获,2、打开预览,3,正在全屏模式
35 ** input parameters: pImageSize: 用于设置两个通道的视频输出大小
36 ** output parameters: 无
37 ** Returned value: TRUE:成功;FALSE:失败
38 *********************************************************************************************************/



相关文章:

  • 白色的风信子
  • 2011经典语句
  • WebSphere应用服务器证书过期问题解决
  • yum安装MySQL并设置密码
  • 电线电缆规格型号
  • SQL Server大负载的生产环境下的性能优化:初识元数据优化
  • iphone-common-codes-ccteam源代码 CCMail.h
  • 《如何成为卓越的大学教师》的阅读笔记及感想 (一)
  • 《TCP/IP路由技术》卷一 中文版错误点纠正
  • SecureCRT下传输文件
  • 关于图片的验证码
  • 玫瑰的红色
  • RHCS集群 切换时defunct僵尸进程解决方案
  • 深入研究mysql中group by与order by取分类最新时间内容——同理在android里也可用
  • 点击切换背景色,离开隐藏当前背景色显示默认背景
  • 「面试题」如何实现一个圣杯布局?
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • android图片蒙层
  • Angular 响应式表单之下拉框
  • CEF与代理
  • js继承的实现方法
  • js面向对象
  • Linux下的乱码问题
  • Meteor的表单提交:Form
  • node-glob通配符
  • Python中eval与exec的使用及区别
  • springboot_database项目介绍
  • v-if和v-for连用出现的问题
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 网页视频流m3u8/ts视频下载
  • 小李飞刀:SQL题目刷起来!
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • #include
  • (2022 CVPR) Unbiased Teacher v2
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (五)IO流之ByteArrayInput/OutputStream
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .net Stream篇(六)
  • .net 程序发生了一个不可捕获的异常
  • .NET 读取 JSON格式的数据
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • .net6Api后台+uniapp导出Excel
  • .NET委托:一个关于C#的睡前故事
  • .Net中ListT 泛型转成DataTable、DataSet
  • @ComponentScan比较