demodoc.cpp
来自「君正早期ucos系统(只有早期的才不没有打包成库),MPLAYER,文件系统,图」· C++ 代码 · 共 1,895 行 · 第 1/5 页
CPP
1,895 行
{
m_MenuCommand=ID_CXIMAGE_MIRROR;
hThread=(HANDLE)_beginthread(RunCxImageThread,0,this);
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnCximageNegative()
{
m_MenuCommand=ID_CXIMAGE_NEGATIVE;
hThread=(HANDLE)_beginthread(RunCxImageThread,0,this);
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnCximageGrayscale()
{
m_MenuCommand=ID_CXIMAGE_GRAYSCALE;
hThread=(HANDLE)_beginthread(RunCxImageThread,0,this);
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnCximageDecreasebpp()
{
if (image==NULL) return;
DlgDecBpp dlg;
dlg.m_bit=4;
dlg.m_maxcolors = 256;
if (dlg.DoModal()==IDOK){
m_MenuCommand=ID_CXIMAGE_DECREASEBPP;
m_fp[0]=(void *)dlg.m_bit;
m_fp[1]=(void *)dlg.m_method;
m_fp[2]=(void *)dlg.m_errordiffusion;
m_fp[3]=(void *)dlg.m_maxcolors;
hThread=(HANDLE)_beginthread(RunCxImageThread,0,this);
}
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnCximageIncreasebpp()
{
if (image==NULL) return;
DlgIncBpp dlg;
dlg.m_bit=24;
if (dlg.DoModal()==IDOK){
m_MenuCommand=ID_CXIMAGE_INCREASEBPP;
m_fp[0]=(void *)dlg.m_bit;
hThread=(HANDLE)_beginthread(RunCxImageThread,0,this);
}
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnCximageRotatel()
{
m_MenuCommand=ID_CXIMAGE_ROTATEL;
hThread=(HANDLE)_beginthread(RunCxImageThread,0,this);
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnCximageRotater()
{
m_MenuCommand=ID_CXIMAGE_ROTATER;
hThread=(HANDLE)_beginthread(RunCxImageThread,0,this);
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnCximageRotate()
{
if (image==NULL) return;
DlgRotate dlg;
dlg.m_angle=(float)12.345;
dlg.m_method=1;
if (dlg.DoModal()==IDOK){
m_MenuCommand=ID_CXIMAGE_ROTATE;
m_fp[0]=(void *)(long)(dlg.m_angle*1000);
m_fp[1]=(void *)(long)(dlg.m_method);
m_fp[2]=(void *)(long)(dlg.m_overflow);
m_fp[3]=(void *)(long)(dlg.m_keepsize);
hThread=(HANDLE)_beginthread(RunCxImageThread,0,this);
}
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnCximageResample()
{
if (image==NULL) return;
DlgResample dlg;
dlg.m_w = image->GetWidth();
dlg.m_h = image->GetHeight();
dlg.m_factor=(float)2;
dlg.m_ratio = ((float)image->GetWidth())/((float)image->GetHeight());
dlg.m_newwidth = 100;
dlg.m_newheight = (DWORD)(dlg.m_newwidth / dlg.m_ratio);
if (dlg.DoModal()==IDOK){
m_MenuCommand=ID_CXIMAGE_RESAMPLE;
if (dlg.m_sizemode==1){
dlg.m_newwidth = (DWORD)(dlg.m_w * fabs(dlg.m_factor));
dlg.m_newheight = (DWORD)(dlg.m_h * fabs(dlg.m_factor));
}
m_fp[0]=(void *)(long)(dlg.m_newwidth);
m_fp[1]=(void *)(long)(dlg.m_newheight);
m_fp[2]=(void *)(long)(dlg.m_mode);
hThread=(HANDLE)_beginthread(RunCxImageThread,0,this);
}
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::UpdateStatusBar()
{
if (image){
CStatusBar& statusBar = ((CMainFrame *)(AfxGetApp()->m_pMainWnd))->GetStatusBar();
CString s,t;
t = theApp.GetDescFromType(image->GetType());
s.Format("(%dx%dx%d)",image->GetWidth(),image->GetHeight(),image->GetBpp());
statusBar.SetPaneText(4, s);
statusBar.SetPaneText(3,t.Mid(0,3));
s.Format("Time (s): %.3f",m_etime);
statusBar.SetPaneText(2, s);
// ((CMainFrame *)(AfxGetApp()->m_pMainWnd))->GetProgressBar().SetPos(0);
}
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnViewZoomin()
{
if (m_ZoomFactor>=16) return;
if (m_ZoomFactor == 0.50f) m_ZoomFactor = 0.75f;
else if (m_ZoomFactor == 0.75f) m_ZoomFactor = 1.00f;
else if (m_ZoomFactor == 1.00f) m_ZoomFactor = 1.50f;
else if (m_ZoomFactor == 1.50f) m_ZoomFactor = 2.00f;
else m_ZoomFactor*=2;
CStatusBar& statusBar = ((CMainFrame *)(AfxGetApp()->m_pMainWnd))->GetStatusBar();
CString s;
s.Format("%4.0f %%",m_ZoomFactor*100);
statusBar.SetPaneText(2, s);
UpdateAllViews(NULL,WM_USER_NEWIMAGE);
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnViewZoomout()
{
if (m_ZoomFactor<=0.0625) return;
if (m_ZoomFactor == 2.00f) m_ZoomFactor = 1.50f;
else if (m_ZoomFactor == 1.50f) m_ZoomFactor = 1.00f;
else if (m_ZoomFactor == 1.00f) m_ZoomFactor = 0.75f;
else if (m_ZoomFactor == 0.75f) m_ZoomFactor = 0.50f;
else m_ZoomFactor/=2;
CStatusBar& statusBar = ((CMainFrame *)(AfxGetApp()->m_pMainWnd))->GetStatusBar();
CString s;
s.Format("%4.1f %%",m_ZoomFactor*100);
statusBar.SetPaneText(2, s);
UpdateAllViews(NULL,WM_USER_NEWIMAGE);
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnUpdateViewZoomin(CCmdUI* pCmdUI)
{
if (stretchMode) pCmdUI->Enable(0);
if (m_ZoomFactor>=16) pCmdUI->Enable(0);
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnUpdateViewZoomout(CCmdUI* pCmdUI)
{
if (stretchMode) pCmdUI->Enable(0);
if (m_ZoomFactor<=0.125) pCmdUI->Enable(0);
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnViewNormalviewing11()
{
m_ZoomFactor=1;
UpdateAllViews(NULL,WM_USER_NEWIMAGE);
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnUpdateViewNormalviewing11(CCmdUI* pCmdUI)
{
if (stretchMode) pCmdUI->Enable(0);
if (m_ZoomFactor==1) pCmdUI->Enable(0);
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnUpdateCximageSettransparency(CCmdUI* pCmdUI)
{
if (image && hThread==0) pCmdUI->Enable(1);
else pCmdUI->Enable(0);
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnCximageRemovetransparency()
{
SubmitUndo();
if (image) image->SetTransIndex(-1);
UpdateAllViews(NULL);
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnCximageSettransparency()
{
m_WaitingClick=TRUE;
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::Stopwatch(int start0stop1)
{
if (start0stop1==0) QueryPerformanceCounter(&m_swStart);
else {
QueryPerformanceCounter(&m_swStop);
if (m_swFreq.LowPart==0 && m_swFreq.HighPart==0) m_etime = -1;
else {
m_etime = (float)(m_swStop.LowPart - m_swStart.LowPart);
if (m_etime < 0) m_etime += 2^32;
m_etime /= (m_swFreq.LowPart+m_swFreq.HighPart * 2^32);
}
}
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnCximageOptions()
{
if (image==NULL) return;
DlgOptions dlg;
dlg.m_quality = image->GetJpegQuality();
dlg.m_xres = image->GetXDPI();
dlg.m_yres = image->GetYDPI();
dlg.m_Opt_tif = image->GetCodecOption(CXIMAGE_FORMAT_TIF);
dlg.m_Opt_gif = image->GetCodecOption(CXIMAGE_FORMAT_GIF);
dlg.m_Opt_jpg = image->GetCodecOption(CXIMAGE_FORMAT_JPG);
dlg.m_Opt_png = image->GetCodecOption(CXIMAGE_FORMAT_PNG);
dlg.m_exif = &m_exif;
if (dlg.DoModal()==IDOK){
image->SetJpegQuality(dlg.m_quality);
image->SetXDPI(dlg.m_xres);
image->SetYDPI(dlg.m_yres);
image->SetCodecOption(dlg.m_Opt_tif, CXIMAGE_FORMAT_TIF);
image->SetCodecOption(dlg.m_Opt_gif, CXIMAGE_FORMAT_GIF);
image->SetCodecOption(dlg.m_Opt_jpg, CXIMAGE_FORMAT_JPG);
image->SetCodecOption(dlg.m_Opt_png, CXIMAGE_FORMAT_PNG);
#ifdef VATI_EXTENSIONS
theApp.m_optJpegQuality = dlg.m_quality;
#endif
}
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnCximageDither()
{
if (image==NULL) return;
DlgDither dlg;
if (dlg.DoModal()==IDOK){
m_MenuCommand=ID_CXIMAGE_DITHER;
m_fp[0]=(void*)dlg.m_method;
hThread=(HANDLE)_beginthread(RunCxImageThread,0,this);
}
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnCximageThreshold()
{
if (image==NULL) return;
DlgThreshold dlg;
dlg.m_level=(BYTE)image->Mean();
if (dlg.DoModal()==IDOK){
m_MenuCommand=ID_CXIMAGE_THRESHOLD;
m_fp[0]=(void *)(BYTE)(dlg.m_level);
hThread=(HANDLE)_beginthread(RunCxImageThread,0,this);
}
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnCximageSplitrgb()
{
if (image==NULL) return;
CxImage *newr = new CxImage();
CxImage *newg = new CxImage();
CxImage *newb = new CxImage();
Stopwatch(0);
image->SplitRGB(newr,newg,newb);
Stopwatch(1);
UpdateStatusBar();
((CDemoApp*)AfxGetApp())->m_nDocCount++;
CDemoDoc *NewDocr=(CDemoDoc*)((CDemoApp*)AfxGetApp())->demoTemplate->OpenDocumentFile(NULL);
if (NewDocr) {
NewDocr->image = newr;
CString s;
s.Format("Red Channel %d from %s",((CDemoApp*)AfxGetApp())->m_nDocCount,GetTitle());
NewDocr->SetTitle(s);
NewDocr->UpdateAllViews(0,WM_USER_NEWIMAGE);
}
CDemoDoc *NewDocg=(CDemoDoc*)((CDemoApp*)AfxGetApp())->demoTemplate->OpenDocumentFile(NULL);
if (NewDocg) {
NewDocg->image = newg;
CString s;
s.Format("Green Channel %d from %s",((CDemoApp*)AfxGetApp())->m_nDocCount,GetTitle());
NewDocg->SetTitle(s);
NewDocg->UpdateAllViews(0,WM_USER_NEWIMAGE);
}
CDemoDoc *NewDocb=(CDemoDoc*)((CDemoApp*)AfxGetApp())->demoTemplate->OpenDocumentFile(NULL);
if (NewDocb) {
NewDocb->image = newb;
CString s;
s.Format("Blue Channel %d from %s",((CDemoApp*)AfxGetApp())->m_nDocCount,GetTitle());
NewDocb->SetTitle(s);
NewDocb->UpdateAllViews(0,WM_USER_NEWIMAGE);
}
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnCximageSplityuv()
{
if (image==NULL) return;
CxImage *newr = new CxImage();
CxImage *newg = new CxImage();
CxImage *newb = new CxImage();
Stopwatch(0);
image->SplitYUV(newr,newg,newb);
Stopwatch(1);
UpdateStatusBar();
((CDemoApp*)AfxGetApp())->m_nDocCount++;
CDemoDoc *NewDocr=(CDemoDoc*)((CDemoApp*)AfxGetApp())->demoTemplate->OpenDocumentFile(NULL);
if (NewDocr) {
NewDocr->image = newr;
CString s;
s.Format("Y Channel %d from %s",((CDemoApp*)AfxGetApp())->m_nDocCount,GetTitle());
NewDocr->SetTitle(s);
NewDocr->UpdateAllViews(0,WM_USER_NEWIMAGE);
}
CDemoDoc *NewDocg=(CDemoDoc*)((CDemoApp*)AfxGetApp())->demoTemplate->OpenDocumentFile(NULL);
if (NewDocg) {
NewDocg->image = newg;
CString s;
s.Format("U Channel %d from %s",((CDemoApp*)AfxGetApp())->m_nDocCount,GetTitle());
NewDocg->SetTitle(s);
NewDocg->UpdateAllViews(0,WM_USER_NEWIMAGE);
}
CDemoDoc *NewDocb=(CDemoDoc*)((CDemoApp*)AfxGetApp())->demoTemplate->OpenDocumentFile(NULL);
if (NewDocb) {
NewDocb->image = newb;
CString s;
s.Format("V Channel %d from %s",((CDemoApp*)AfxGetApp())->m_nDocCount,GetTitle());
NewDocb->SetTitle(s);
NewDocb->UpdateAllViews(0,WM_USER_NEWIMAGE);
}
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnCximageSplithsl()
{
if (image==NULL) return;
CxImage *newr = new CxImage();
CxImage *newg = new CxImage();
CxImage *newb = new CxImage();
Stopwatch(0);
image->SplitHSL(newr,newg,newb);
Stopwatch(1);
UpdateStatusBar();
((CDemoApp*)AfxGetApp())->m_nDocCount++;
CDemoDoc *NewDocr=(CDemoDoc*)((CDemoApp*)AfxGetApp())->demoTemplate->OpenDocumentFile(NULL);
if (NewDocr) {
NewDocr->image = newr;
CString s;
s.Format("Hue Channel %d from %s",((CDemoApp*)AfxGetApp())->m_nDocCount,GetTitle());
NewDocr->SetTitle(s);
NewDocr->UpdateAllViews(0,WM_USER_NEWIMAGE);
}
CDemoDoc *NewDocg=(CDemoDoc*)((CDemoApp*)AfxGetApp())->demoTemplate->OpenDocumentFile(NULL);
if (NewDocg) {
NewDocg->image = newg;
CString s;
s.Format("Saturation Channel %d from %s",((CDemoApp*)AfxGetApp())->m_nDocCount,GetTitle());
NewDocg->SetTitle(s);
NewDocg->UpdateAllViews(0,WM_USER_NEWIMAGE);
}
CDemoDoc *NewDocb=(CDemoDoc*)((CDemoApp*)AfxGetApp())->demoTemplate->OpenDocumentFile(NULL);
if (NewDocb) {
NewDocb->image = newb;
CString s;
s.Format("Lightness Channel %d from %s",((CDemoApp*)AfxGetApp())->m_nDocCount,GetTitle());
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?