1 /*********************************************************************************************************
2 ** Function name: epcCamGetRgbFrame
3 ** Descriptions: 本函数用于获取RGB通道的图像的数据缓存区地址
4 ** input parameters: prAddInfo 存放获取的地址,注意访问该地址的图像数据时候使用SetKMode(TRUE)
5 ** output parameters: 无
6 ** Returned value: TRUE:成功;FALSE:失败
7 *********************************************************************************************************/
8
9
10
11
12
13 EpcsCam::EpcsCam(void)
14 {
15 hDLL=LoadLibrary(CString("\\FlashDisk2\\epcCameraLib.dll"));//加载动态链接库MyDll.dll文件;
16
17
18
19 }
20
21 EpcsCam::~EpcsCam(void)
22 {
23 FreeLibrary(hDLL);//卸载MyDll.dll文件;
24 }
25
26
27
28 BOOL EpcsCam::epcCamCapture (BOOL bIsRGB, BOOL bIsYUV)
29 {
30 BOOL bCaptureSucced=FALSE;
31 pEpcCamCapture epcCamCapture =NULL;
32 epcCamCapture=(pEpcCamCapture)GetProcAddress(hDLL,CString("epcCamCapture"));
33 if (epcCamCapture)
34 {
35 bCaptureSucced=epcCamCapture(bIsRGB,bIsYUV);
36 }
37 return bCaptureSucced;
38 }
39
40
41 BOOL EpcsCam::epcCamPreviewOn (DWORD dwXSize, DWORD dwYSize)
42 {
43 BOOL bPreviewOnSucced=FALSE;
44 pEpcCamPreviewOn epcCamPreviewOn =NULL;
45 epcCamPreviewOn=(pEpcCamPreviewOn)GetProcAddress(hDLL,CString("epcCamPreviewOn"));
46 if (epcCamPreviewOn)
47 {
48 bPreviewOnSucced=epcCamPreviewOn(dwXSize,dwYSize);
49 }
50 return bPreviewOnSucced;
51 }
52
53
54
55 BOOL EpcsCam::epcCamSetImage (IMAGE_SIZE* pImageSize)
56 {
57 BOOL bSetImageSucced=FALSE;
58 pEpcCamSetImage epcCamSetImage =NULL;
59 epcCamSetImage=(pEpcCamSetImage)GetProcAddress(hDLL,CString("epcCamSetImage"));
60 if (epcCamSetImage)
61 {
62 bSetImageSucced=epcCamSetImage(pImageSize);
63 }
64 return bSetImageSucced;
65 }
66
67
68 BOOL EpcsCam::epcCamGetRgbFrame (PINGPONG_PR *prAddInfo)
69 {
70 BOOL betRgbFrameSucced=FALSE;
71 pEpcCamGetRgbFrame epcCamGetRgbFrame =NULL;
72 epcCamGetRgbFrame=(pEpcCamGetRgbFrame)GetProcAddress(hDLL,CString("epcCamGetRgbFrame"));
73 if (epcCamGetRgbFrame)
74 {
75 betRgbFrameSucced=epcCamGetRgbFrame(prAddInfo);
76 }
77 return betRgbFrameSucced;
78 }

 

1.2保存位图和保存异常日志等文件操作

FileOperate.h

 1 #pragma once
2
3 class FileOperate
4 {
5 public:
6 FileOperate(void);
7 ~FileOperate(void);
8
9
10 public:
11 static void WriteLogMsg(char chLogMsg[]);
12 static CString GetTimeTag();
13
14 #if 1
15
16 static void WriteBin(char chBin[]);
17 //根据数据保存图片
18 static BOOL bmpSaveImage (PTSTR pstrFileName, BITMAPFILEHEADER * pbmfh);
19
20 // 保存位图
21 static void SaveBitMap(void);
22 static CString SaveBmp(char *pcBmpData,char *bmpFileData);
23 static CString SaveBmp0(BYTE *pcBmpData);//C++调用的函数
24
25 #endif
26
27 public:
28 static void ImageConvertDemo(
29 BYTE *pInBmp565Data,//输入的RGB565位图的数据实体部分(不包括文件头等信息)
30 DWORD dwBitMapDataSize,//位图数据实体长度(不包括文件头等信息)
31 BYTE **ppOutMallocData,//传出的JPG图片数据实体的指针
32 DWORD * pdwOutJpegMemSize,//传出的JPG图片数据的大小
33 int * pState //状态码:记录在执行此函数的过程中可能出现的问题
34 //char *bmpFileData
35 );
36
37
38 };
 

FileOperate.cpp

  1 #include "StdAfx.h"
2 #include "FileOperate.h"
3
4 //#include "epccameralib.h"
5
6
7 #include "initguid.h "//如果不引用此头文件,就会出现 无法解析外部符号的错误
8 #include "IImageDemo.h"//图片转码测试
9
10 FileOperate::FileOperate(void)
11 {
12 }
13
14 FileOperate::~FileOperate(void)
15 {
16 }
17
18
19
20
21 void FileOperate::WriteLogMsg(char chLogMsg[])
22 {
23 char strFilePath[40] = "\\FlashDisk2\\Log\\";//如果是"\\Log\\"则到了当前盘符的根目录下了。
24 char strTimeFileName[20];//将当前时间转换成字符串---声明字符串长度的时候,要比实际长度多1,作为结尾符号
25
26
27 SYSTEMTIME sysTime;
28 GetLocalTime( &sysTime ); //得到系统时间
29
30
31 //sprintf(strTimeFileName,"%d-%d-%d",sysTime.wYear,sysTime.wMonth,sysTime.wDay);//"2010-09-21"
32
33 strcpy(strTimeFileName,"ErrorLog");
34 strcat(strTimeFileName,".txt");//加上扩展名--登录日志
35 strcat(strFilePath,strTimeFileName);//得到完整的路径名
36
37
38 FILE *fp;//文件指针
39
40 if ((fp=fopen(strFilePath,"a"))==NULL)//以追加的形式往文件中写东西
41 {
42 //如果打开不成功,则一般表示没有Log目录
43 //创建Log目录,然后再重新打开--一般情况下,如果目录存在的话,就不会创建成功的。
44 if(!CreateDirectory(_T("\\FlashDisk2\\Log"),NULL))
45 { //创建目录失败
46 //printf("Create Directory failed!\n");
47 return;
48 }else
49 {
50 //printf("Create Directory succeed!\n");//cout << "OK" <<endl;
51
52 if ((fp=fopen(strFilePath,"a"))==NULL)//以追加的形式往文本文件中写东西
53 {
54 //printf("Open Failed\n");
55 //exit(0);
56 return;
57 }
58 }
59 }
60
61 char strTimeTag[30];//="2010-09-21"; //将时间转成字符串
62 sprintf(strTimeTag,"%d-%d-%d %d:%d:%d ",sysTime.wYear,sysTime.wMonth,sysTime.wDay,
63 sysTime.wHour,sysTime.wMinute,sysTime.wSecond);//"2010-09-21"
64
65 //strftime(chTimeTag, sizeof(chTimeTag), "%Y/%m/%d %X",&tim);//年月日时间字符串--作为登录日志中信息的时间标记头
66
67
68 fputs(strTimeTag,fp);//写入时间标记
69 fputs("# ",fp);//分隔符号
70 fputs(chLogMsg,fp);//写入消息日志
71 fputs("\n",fp);//换行
72
73 int i=fclose(fp);
74
75 if (i==0)
76 {
77 //printf("succeed!\n");
78 }else
79 {
80 //printf("fail!\n");
81 }
82 }
83
84 CString FileOperate::GetTimeTag()
85 {
86
87 CString strTimetag;
88
89 SYSTEMTIME sysTime;
90 GetLocalTime( &sysTime ); //得到系统时间
91
92 strTimetag.Format(_T("%d%d%d-%d%d%d"),sysTime.wYear,sysTime.wMonth,sysTime.wDay,sysTime.wHour,sysTime.wMinute,sysTime.wSecond);
93 //sprintf(strTimeFileName,"%d-%d-%d",sysTime.wYear,sysTime.wMonth,sysTime.wDay);//"2010-09-21"
94 return strTimetag;
95
96 }
97
98 #if 1
99
100
101 void FileOperate::WriteBin(char chBin[])
102 {
103 char strFilePath[40] = "\\FlashDisk2\\Bins\\";//如果是"\\Log\\"则到了当前盘符的根目录下了。
104 char strTimeFileName[20];//将当前时间转换成字符串---声明字符串长度的时候,要比实际长度多1,作为结尾符号
105
106
107 SYSTEMTIME sysTime;
108 GetLocalTime( &sysTime ); //得到系统时间
109 //sprintf(strTimeFileName,"%d-%d-%d",sysTime.wYear,sysTime.wMonth,sysTime.wDay);//"2010-09-21"
110
111
112 sprintf(strTimeFileName,"%d%d%d-%d%d%d",sysTime.wYear,sysTime.wMonth,sysTime.wDay,
113 sysTime.wHour,sysTime.wMinute,sysTime.wSecond);//"2010-09-21"
114
115 strcat(strTimeFileName,".bins");//加上扩展名--登录日志
116 strcat(strFilePath,strTimeFileName);//得到完整的路径名
117
118
119 FILE *fp;//文件指针
120
121 if ((fp=fopen(strFilePath,"wb+"))==NULL)//以追加的形式往二进制文件中写东西
122 {
123 //如果打开不成功,则一般表示没有Log目录
124 //创建Log目录,然后再重新打开--一般情况下,如果目录存在的话,就不会创建成功的。
125 if(!CreateDirectory(_T("\\FlashDisk2\\Bins"),NULL))
126 {
127 printf("Create Directory failed!\n");
128 }else
129 {
130 printf("Create Directory succeed!\n");//cout << "OK" <<endl;
131
132 if ((fp=fopen(strFilePath,"a"))==NULL)//以追加的形式往文件中写东西
133 {
134 printf("Open Failed\n");
135 exit(0);
136 }
137 }
138 }
139
140 char strTimeTag[30];//="2010-09-21"; //将时间转成字符串
141 sprintf(strTimeTag,"%d-%d-%d %d:%d:%d ",sysTime.wYear,sysTime.wMonth,sysTime.wDay,
142 sysTime.wHour,sysTime.wMinute,sysTime.wSecond);//"2010-09-21"
143
144 //strftime(chTimeTag, sizeof(chTimeTag), "%Y/%m/%d %X",&tim);//年月日时间字符串--作为登录日志中信息的时间标记头
145
146
147 //fputs(strTimeTag,fp);//写入时间标记
148 //fputs(" : ",fp);//分隔符号
149 //fputs(chLogMsg,fp);//写入消息日志
150 //fputs("\n",fp);//换行
151
152 fputs(chBin,fp);
153 int i=fclose(fp);
154
155 if (i==0)
156 {
157 printf("succeed!\n");
158 }else
159 {
160 printf("fail!\n");
161 }
162 }
163
164
165
166
167
168
169 // 保存位图--最原来的模型
170 void FileOperate::SaveBitMap(void)
171 {
172 // TODO: Add your control notification handler code here
173 IMAGE_SIZE tDispSize = {0};
174 DWORD dwPreMode;
175 PINGPONG_PR DataAddr;
176 BITMAPFILEHEADER *pFileHead = NULL; /* 位图文件的头指针 */
177 BITMAPINFO *pBmpInfo = NULL; /* 位图信息的指针 */
178 char *pcBmpData = NULL; /* 位图数据区的指针 */
179 DWORD dwImgeX; /* 位图水平像素 */
180 DWORD dwImgeY; /* 位图垂直像素 */
181
182 DWORD dwFileHeadSize = sizeof(BITMAPFILEHEADER); /* 位图文件的头区域大小 */
183 DWORD dwInfoSize = sizeof(BITMAPINFO) + 4 * 2; /* 位图文件的信息区大小 */
184 DWORD dwBipMapSize; /* 位图文件的数据区大小 */
185 CString cstrPathname;
186
187 cstrPathname="\\test.bmp";
188
189 dwImgeX = 320;
190 dwImgeY = 240;
191
192 dwBipMapSize = 2 * dwImgeX * dwImgeY; /* 文件头指针指向整个位图的空间 320*240*2/1024 =150K*/
193 pFileHead = (BITMAPFILEHEADER*)malloc(dwFileHeadSize + dwInfoSize + dwBipMapSize);
194 pBmpInfo = (BITMAPINFO *)malloc(dwInfoSize);
195
196 pFileHead->bfOffBits = dwFileHeadSize + dwInfoSize; /* 以下为填充位图的空间 */
197 pFileHead->bfSize = dwFileHeadSize + dwInfoSize + dwBipMapSize;
198 pFileHead->bfType = 0x4D42;
199
200 pcBmpData = (char *) pFileHead + pFileHead->bfOffBits;
201
202 pBmpInfo->bmiHeader.biHeight = 0 - (signed)dwImgeY;
203 pBmpInfo->bmiHeader.biWidth = dwImgeX ;
204 pBmpInfo->bmiHeader.biBitCount = 16;
205 pBmpInfo->bmiHeader.biClrImportant = 0;
206 pBmpInfo->bmiHeader.biClrUsed = 0;
207 pBmpInfo->bmiHeader.biCompression = BI_BITFIELDS;
208 //pBmpInfo->bmiHeader.biCompression = BI_RGB;
209 pBmpInfo->bmiHeader.biPlanes = 1;
210 pBmpInfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
211 pBmpInfo->bmiHeader.biSizeImage = dwBipMapSize;
212
213 pBmpInfo->bmiColors[0].rgbBlue = 0x00;
214 pBmpInfo->bmiColors[0].rgbGreen = 0xF8;
215 pBmpInfo->bmiColors[0].rgbRed = 0x00;
216 pBmpInfo->bmiColors[0].rgbReserved = 0x00;
217 pBmpInfo->bmiColors[1].rgbBlue = 0xE0;
218 pBmpInfo->bmiColors[1].rgbGreen = 0x07;
219 pBmpInfo->bmiColors[1].rgbRed = 0x00;
220 pBmpInfo->bmiColors[1].rgbReserved = 0x00;
221 pBmpInfo->bmiColors[2].rgbBlue = 0x1F;
222 pBmpInfo->bmiColors[2].rgbGreen = 0x00;
223 pBmpInfo->bmiColors[2].rgbRed = 0x00;
224 pBmpInfo->bmiColors[2].rgbReserved = 0x00;
225
226 memcpy((void*)(pFileHead + 1), (void*)pBmpInfo, dwInfoSize);
227
228
229 //最后将RGB565的图片数据全部COPY到pcBmpData中了----这里可以通过读文件的形式将这些数据读上来。!!!!!!
230 //只需要在此处将那个RGB565的文件用二进制的格式读进来就OK了!!!
231 CFile hFile;
232 hFile.Open(_T("\\2010-9-23.bins"),CFile::modeRead);
233 hFile.Read(pcBmpData,dwBipMapSize);
234
235 bmpSaveImage((PTSTR)cstrPathname.GetBuffer(0), pFileHead); /* 保存成BMP图片 */
236 cstrPathname.ReleaseBuffer();
237
238 free(pFileHead);
239 free(pBmpInfo);
240 hFile.Close();//关闭文件
241
242 }



posted on 2011-12-27 06:08  风行雪舞  阅读(301)  评论(0编辑  收藏  举报
无觅相关文章插件,快速提升流量