-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathImageOptimize.cpp
More file actions
143 lines (121 loc) · 3.67 KB
/
ImageOptimize.cpp
File metadata and controls
143 lines (121 loc) · 3.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
// ImageOptimize.cpp : 实现文件
//
#include "stdafx.h"
#include "BindImage.h"
#include "ImageOptimize.h"
#include ".\imageoptimize.h"
#include "optipng/optipng.h"
#include <vector>
using namespace std;
// CImageOptimize 对话框
IMPLEMENT_DYNAMIC(CImageOptimize, CDialog)
CImageOptimize::CImageOptimize(CWnd* pParent /*=NULL*/)
: CDialog(CImageOptimize::IDD, pParent)
{
}
CImageOptimize::~CImageOptimize()
{
}
void CImageOptimize::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CImageOptimize, CDialog)
ON_BN_CLICKED(IDOK, OnBnClickedOk)
END_MESSAGE_MAP()
// CImageOptimize 消息处理程序
static void app_printf(const char *fmt, ...){}
static void app_print_cntrl(int cntrl_code){}
static void app_progress(unsigned long current_step, unsigned long total_steps){
ProcessDlg.AddCount(1);
ProcessDlg.AddCountSub(1);
}
static void panic(const char *msg){}
static CString m_strPath;
static vector<CString> m_vecName;
void CImageOptimize::FindInAll(const char* lpszPath)
{
char szFind[MAX_PATH];
lstrcpy(szFind, lpszPath);
lstrcat(szFind, "*.*");
WIN32_FIND_DATA wfd;
HANDLE hFind = FindFirstFile(szFind, &wfd);
if (hFind == INVALID_HANDLE_VALUE)
return;
do
{
if (wfd.cFileName[0] == '.')
continue;
if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
char szFile[MAX_PATH];
wsprintf(szFile, "%s%s/", lpszPath, wfd.cFileName);
FindInAll(szFile);
}
else
{
char szFile[MAX_PATH];
CString buffer=wfd.cFileName;
if(buffer.Mid(buffer.ReverseFind('.')+1)!="png")
continue;
wsprintf(szFile, "%s%s", lpszPath, wfd.cFileName);
CString strTemp=lpszPath;
strTemp=strTemp.Mid(m_strPath.GetLength()+1);
m_vecName.push_back(strTemp+buffer);
printf("SizeLow:%d\n",wfd.nFileSizeLow);
printf("SizeHight:%d\n",wfd.nFileSizeHigh);
printf("%s\n",szFile);
}
} while (FindNextFile(hFind, &wfd));
FindClose(hFind);
}
void CImageOptimize::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
//OnOK();
m_strPath = GetFloderPath(GetSafeHwnd());
if(m_strPath=="")
return;
//m_BindCore.setFilePath(m_strPath);
CString fullPath=m_strPath+"\\";
FindInAll(fullPath.GetBuffer());
//for (int i=0;i<m_vecName.size();i++)
//m_BindCore.AddImage(fullPath+m_vecName[i],m_vecName[i]);
struct opng_ui ui;
ui.printf_fn = app_printf;
ui.print_cntrl_fn = app_print_cntrl;
ui.progress_fn = app_progress;
ui.panic_fn = panic;
static struct opng_options options;
memset(&options, 0, sizeof(options));
options.optim_level = -1;
options.interlace = -1;
if (opng_initialize(&options, &ui) != 0)
printf("Can't initialize optimization engine");
/*POSITION pos = dlg.GetStartPosition();
vector<CString> strList;
while (pos != NULL)
{
strPath = dlg.GetNextPathName(pos);
CString m_filetitle;
m_filetitle=strPath;
m_filetitle=m_filetitle.Mid(m_filetitle.ReverseFind('\\')+1);
strList.push_back(strPath);
}*/
ProcessDlg.ShowWindow(SW_SHOW);
ProcessDlg.SetProcess(m_vecName.size()*9);
for (int i=0;i<m_vecName.size();i++){
ProcessDlg.SetProcessSub(9);
opng_optimize((fullPath+m_vecName[i]).GetBuffer());
}
ProcessDlg.ShowWindow(SW_HIDE);
if (opng_finalize() != 0)
printf("Can't finalize optimization engine");
m_vecName.clear();
AfxMessageBox("优化完毕!",MB_OK|MB_ICONINFORMATION);
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT,_T("文件png|*.png||"),NULL);
CString strPath,str;
dlg.m_ofn.lpstrFile=str.GetBuffer(1000000);
str.ReleaseBuffer();
dlg.m_ofn.nMaxFile = 50000;
}