2025-11-27 16:46:48 +09:00

314 lines
7.5 KiB
C++

// JPGtestDlg.cpp : implementation file
//
#include "stdafx.h"
#include "oxbmpfle.h"
#include "oxjpgfle.h"
#include "oxjpgcom.h"
#include "oxjpgdom.h"
#include "oxjpgexp.h"
#include "utsampleabout.h"
#include "JPGtest.h"
#include "JPGtestDlg.h"
#include "UTBStrOp.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define SIZE_ERROR_BUF 255
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// CJPGtestDlg dialog
CJPGtestDlg::CJPGtestDlg(CWnd* pParent /*=NULL*/)
: CDialog(CJPGtestDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CJPGtestDlg)
m_sGraphicsFile = _T("??????.bmp");
m_sJPEGFile = _T("??????.jpg");
m_bGray = FALSE;
m_bBase = FALSE;
m_bProgr = FALSE;
m_bOpt = FALSE;
m_nQuality = 75;
m_nSmooth = 0;
m_nMaxMem = 0;
m_nDCT = -1;
m_nColors = 0;
m_nMaxMem2 = 0;
m_bOnePass = FALSE;
m_bGrayScale2 = FALSE;
m_bFast = FALSE;
m_bNoSmooth = FALSE;
m_bOS2 = FALSE;
m_nDither = -1;
m_nScale = -1;
m_nDCT2 = -1;
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CJPGtestDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CJPGtestDlg)
DDX_Control(pDX, IDC_TIME, m_Time_Static);
DDX_Text(pDX, IDC_EDIT1, m_sGraphicsFile);
DDX_Text(pDX, IDC_EDIT2, m_sJPEGFile);
DDX_Check(pDX, IDC_CHECK1, m_bGray);
DDX_Check(pDX, IDC_CHECK2, m_bBase);
DDX_Check(pDX, IDC_CHECK3, m_bProgr);
DDX_Check(pDX, IDC_CHECK4, m_bOpt);
DDX_Text(pDX, IDC_EDIT3, m_nQuality);
DDX_Text(pDX, IDC_EDIT4, m_nSmooth);
DDX_Text(pDX, IDC_EDIT5, m_nMaxMem);
DDX_Radio(pDX, IDC_RADIO1, m_nDCT);
DDX_Text(pDX, IDC_COLORS_EDIT, m_nColors);
DDX_Text(pDX, IDC_MAXMEM_EDIT, m_nMaxMem2);
DDX_Check(pDX, IDC_ONEPASS_CHECK, m_bOnePass);
DDX_Check(pDX, IDC_CHECK6, m_bGrayScale2);
DDX_Check(pDX, IDC_FAST_CHECK, m_bFast);
DDX_Check(pDX, IDC_NOSMOOTH_CHECK, m_bNoSmooth);
DDX_Check(pDX, IDC_CHECK5, m_bOS2);
DDX_Radio(pDX, IDC_FS_RADIO, m_nDither);
DDX_Radio(pDX, IDC_ONEONE_RADIO, m_nScale);
DDX_Radio(pDX, IDC_DINT_RADIO, m_nDCT2);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CJPGtestDlg, CDialog)
//{{AFX_MSG_MAP(CJPGtestDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_GRAPH_BUTTON, OnGraphButton)
ON_BN_CLICKED(IDC_JPG_BUTTON, OnJpgButton)
ON_BN_CLICKED(IDC_Compress, OnCompress)
ON_BN_CLICKED(IDC_UnCompress, OnUnCompress)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CJPGtestDlg message handlers
BOOL CJPGtestDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
}
void CJPGtestDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CUTSampleAboutDlg dlgAbout(IDR_MAINFRAME,ID_DESCRIPTION_FILE);
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CJPGtestDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CJPGtestDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CJPGtestDlg::OnGraphButton()
{
char szFilter[] = "Bitmap Files (*.bmp) | *.bmp ||";
CFileDialog FileDialog(TRUE, "bmp", "*.bmp", OFN_HIDEREADONLY, szFilter, this);
if (FileDialog.DoModal() == IDOK)
{
m_sGraphicsFile = FileDialog.GetPathName();
UpdateData(FALSE);
}
}
void CJPGtestDlg::OnJpgButton()
{
char szFilter[] = "JPEG Files (*.jpg) | *.jpg ||";
CFileDialog FileDialog(TRUE, "jpg", "*.jpg", OFN_HIDEREADONLY, szFilter, this);
if (FileDialog.DoModal() == IDOK)
{
m_sJPEGFile = FileDialog.GetPathName();
UpdateData(FALSE);
}
}
void CJPGtestDlg::OnCompress()
{
if (!UpdateData(TRUE))
return;
BeginWaitCursor();
COXBMPFile BMPFile(m_sGraphicsFile);
COXJPEGFile JPGFile(m_sJPEGFile);
COXJPEGCompressor JCompr;
JCompr.SetGrayScale(m_bGray);
JCompr.SetBaseLine(m_bBase);
JCompr.SetProgressive(m_bProgr);
JCompr.SetOptimize(m_bOpt);
JCompr.SetQuality(m_nQuality);
if (m_nSmooth != 0)
JCompr.SetSmooth(m_nSmooth);
JCompr.SetMaxMemory(m_nMaxMem);
if (m_nDCT != -1)
JCompr.SetDisCosTranf((EDiscreteCosTransf)(m_nDCT + 1));
DWORD nBeginTicks, nEndTicks;
nBeginTicks = GetTickCount();
short nReturn(0);
TCHAR ErrorBuffer[SIZE_ERROR_BUF];
TRY
{
nReturn = JCompr.DoCompress(&BMPFile, &JPGFile);
if (nReturn == 2)
AfxMessageBox(JCompr.GetWarningMessages());
}
CATCH(COXJPEGException, e)
{
e->GetErrorMessage(ErrorBuffer, SIZE_ERROR_BUF);
AfxMessageBox(CString("Exception : ") + ErrorBuffer);
TRACE((LPCTSTR)ErrorBuffer);
}
END_CATCH
nEndTicks = GetTickCount();
char buffer[20];
UTBStr::sprintf(buffer, 20, "%f", (nEndTicks - nBeginTicks)/1000.0);
m_Time_Static.SetWindowText(buffer);
EndWaitCursor();
}
void CJPGtestDlg::OnUnCompress()
{
if (!UpdateData(TRUE))
return;
BeginWaitCursor();
COXBMPFile BMPFile(m_sGraphicsFile);
BMPFile.SetOS2Format(m_bOS2);
COXJPEGFile JPGFile(m_sJPEGFile);
COXJPEGDecompressor JDecompr;
JDecompr.SetGrayScale(m_bGrayScale2);
JDecompr.SetFast(m_bFast);
JDecompr.SetNoSmooth(m_bNoSmooth);
JDecompr.SetOnePass(m_bOnePass);
JDecompr.SetMaxMemory(m_nMaxMem2);
if (m_nDCT2 != -1)
JDecompr.SetDisCosTranf((EDiscreteCosTransf)(m_nDCT2 + 1));
if (m_nDither != -1)
JDecompr.SetDitherMethod((EDitherMethod)(m_nDither + 1));
if (m_nScale != -1)
JDecompr.SetScale((EDecompScale)(m_nScale + 1));
if (m_nColors != 0)
JDecompr.SetColors(m_nColors);
DWORD nBeginTicks, nEndTicks;
nBeginTicks = GetTickCount();
short nReturn(0);
TCHAR ErrorBuffer[SIZE_ERROR_BUF];
TRY
{
nReturn = JDecompr.DoDecompress(&JPGFile, &BMPFile);
if (nReturn == 2)
AfxMessageBox(JDecompr.GetWarningMessages());
}
CATCH(COXJPEGException, e)
{
e->GetErrorMessage(ErrorBuffer, SIZE_ERROR_BUF);
AfxMessageBox(CString("Exception : ") + ErrorBuffer);
TRACE((LPCTSTR)ErrorBuffer);
}
END_CATCH
nEndTicks = GetTickCount();
char buffer[20];
UTBStr::sprintf(buffer, 20, "%f", (nEndTicks - nBeginTicks)/1000.0);
m_Time_Static.SetWindowText(buffer);
EndWaitCursor();
}