demodoc.cpp
来自「君正早期ucos系统(只有早期的才不没有打包成库),MPLAYER,文件系统,图」· C++ 代码 · 共 1,895 行 · 第 1/5 页
CPP
1,895 行
NewDocb->SetTitle(s);
NewDocb->UpdateAllViews(0,WM_USER_NEWIMAGE);
}
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnCximageSplitcmyk()
{
if (image==NULL) return;
CxImage *newc = new CxImage();
CxImage *newm = new CxImage();
CxImage *newy = new CxImage();
CxImage *newk = new CxImage();
Stopwatch(0);
image->SplitCMYK(newc,newm,newy,newk);
Stopwatch(1);
UpdateStatusBar();
((CDemoApp*)AfxGetApp())->m_nDocCount++;
CDemoDoc *NewDocr=(CDemoDoc*)((CDemoApp*)AfxGetApp())->demoTemplate->OpenDocumentFile(NULL);
if (NewDocr) {
NewDocr->image = newc;
CString s;
s.Format("C 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 = newm;
CString s;
s.Format("M 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 = newy;
CString s;
s.Format("Y Channel %d from %s",((CDemoApp*)AfxGetApp())->m_nDocCount,GetTitle());
NewDocb->SetTitle(s);
NewDocb->UpdateAllViews(0,WM_USER_NEWIMAGE);
}
CDemoDoc *NewDock=(CDemoDoc*)((CDemoApp*)AfxGetApp())->demoTemplate->OpenDocumentFile(NULL);
if (NewDock) {
NewDock->image = newk;
CString s;
s.Format("K Channel %d from %s",((CDemoApp*)AfxGetApp())->m_nDocCount,GetTitle());
NewDock->SetTitle(s);
NewDock->UpdateAllViews(0,WM_USER_NEWIMAGE);
}
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnCximagePseudocolors()
{
if (image==NULL) return;
SubmitUndo();
if (!image->IsGrayScale()) image->GrayScale();
image->HuePalette();
/* POSITION pos = GetFirstViewPosition();
CDemoView* pView = (CDemoView*)GetNextView(pos);
HDC srcDC = ::GetDC(pView->GetSafeHwnd());
HDC memDC = ::CreateCompatibleDC(srcDC);
// copy the screen to the bitmap
CSize sz(image->GetWidth(), image->GetHeight());
int xshift = 0, yshift = 0;
HBITMAP bm =::CreateCompatibleBitmap(srcDC, sz.cx, sz.cy);
HBITMAP oldbm = (HBITMAP)::SelectObject(memDC,bm);
::BitBlt(memDC, 0, 0, sz.cx, sz.cy, srcDC, xshift, yshift, SRCCOPY);
// image->SetTransIndex(-1);
// image->Draw(memDC);
::TextOut(memDC,10,10,"test",4);
CxImage newima;
newima.CreateFromHBITMAP(bm);
image->Transfer(newima);
// free objects
SelectObject(memDC,oldbm);
DeleteObject(memDC);*/
UpdateAllViews(NULL,WM_USER_NEWIMAGE);
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnCximageFiltersColorize()
{
if (image==NULL) return;
DlgColorize dlg;
dlg.m_sat=50;
dlg.m_hue=12;
dlg.m_r=50;
dlg.m_g=0;
dlg.m_b=-50;
if (dlg.DoModal()==IDOK){
m_MenuCommand=ID_CXIMAGE_COLORIZE;
if (dlg.m_bHSL){
m_fp[0]=(void *)(BYTE)(dlg.m_bHSL);
m_fp[1]=(void *)(BYTE)(dlg.m_hue);
m_fp[2]=(void *)(BYTE)(dlg.m_sat);
m_fp[3]=(void *)(BYTE)(dlg.m_blend);
} else {
m_fp[0]=(void *)(BYTE)(dlg.m_bHSL);
m_fp[1]=(void *)(long)(dlg.m_r);
m_fp[2]=(void *)(long)(dlg.m_g);
m_fp[3]=(void *)(long)(dlg.m_b);
}
hThread=(HANDLE)_beginthread(RunCxImageThread,0,this);
}
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnCximageDarken()
{
m_MenuCommand=ID_CXIMAGE_DARKEN;
hThread=(HANDLE)_beginthread(RunCxImageThread,0,this);
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnCximageLighten()
{
m_MenuCommand=ID_CXIMAGE_LIGHTEN;
hThread=(HANDLE)_beginthread(RunCxImageThread,0,this);
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnCximageContrast()
{
m_MenuCommand=ID_CXIMAGE_CONTRAST;
// m_fp[0]=(void *)(long)((128-image->Mean())/4);
m_fp[0]=(void *)(long)(0);
hThread=(HANDLE)_beginthread(RunCxImageThread,0,this);
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnCximageEmboss()
{
m_MenuCommand=ID_CXIMAGE_EMBOSS;
hThread=(HANDLE)_beginthread(RunCxImageThread,0,this);
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnCximageBlur()
{
m_MenuCommand=ID_CXIMAGE_BLUR;
hThread=(HANDLE)_beginthread(RunCxImageThread,0,this);
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnCximageDilate()
{
m_MenuCommand=ID_CXIMAGE_DILATE;
hThread=(HANDLE)_beginthread(RunCxImageThread,0,this);
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnCximageEdge()
{
m_MenuCommand=ID_CXIMAGE_EDGE;
hThread=(HANDLE)_beginthread(RunCxImageThread,0,this);
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnCximageErode()
{
m_MenuCommand=ID_CXIMAGE_ERODE;
hThread=(HANDLE)_beginthread(RunCxImageThread,0,this);
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnCximageSharpen()
{
m_MenuCommand=ID_CXIMAGE_SHARPEN;
hThread=(HANDLE)_beginthread(RunCxImageThread,0,this);
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnCximageSoften()
{
m_MenuCommand=ID_CXIMAGE_SOFTEN;
hThread=(HANDLE)_beginthread(RunCxImageThread,0,this);
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnCximageCrop()
{
SubmitUndo();
RECT r;
#ifdef VATI_EXTENSIONS
// if there is a valid rectangle selection, then call the CropRotatedRectangle instead original Crop
if (m_isRectSel && m_NumSel==5 )
{
CPoint top;
long height, width;
float angle;
int topcorner = -1;
// get upperleft corner
top.x = 999999;
top.y = 999999;
for(int i=0; i<4; i++)
{
if ( top.y >= m_Sel[i].y )
{
if ( top.y == m_Sel[i].y && top.x < m_Sel[i].x )
continue;
top.x = m_Sel[i].x;
top.y = m_Sel[i].y;
topcorner = i;
}
}
// get side lengths (-1st and +1st indexes points to 2 sides)
if ( topcorner > 0 && topcorner < 4 )
height = (long)LEN2D( top.x - m_Sel[topcorner-1].x, top.y - m_Sel[topcorner-1].y );
else if ( topcorner == 0 )
height = (long)LEN2D( top.x - m_Sel[3].x, top.y - m_Sel[3].y );
else
return; // fatal prog error
width = (long)LEN2D( top.x - m_Sel[topcorner+1].x, top.y - m_Sel[topcorner+1].y );
angle = (float)atan2( (float)(m_Sel[topcorner+1].y - top.y), (float)(m_Sel[topcorner+1].x - top.x) );
image->CropRotatedRectangle( top.x, top.y, width, height, angle );
}
else // freehand selection
{
image->SelectionGetBox(r);
r.bottom = image->GetHeight() - 1 -r.bottom;
r.top = image->GetHeight() - 1 -r.top;
image->Crop(r);
}
#else
image->SelectionGetBox(r);
r.bottom = image->GetHeight() - 1 -r.bottom;
r.top = image->GetHeight() - 1 -r.top;
image->Crop(r);
#endif
UpdateStatusBar(); // VAti - to refresh image size in the status bar
UpdateAllViews(NULL,WM_USER_NEWIMAGE);
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnCximageRemovealphachannel()
{
SubmitUndo();
image->AlphaDelete();
image->AlphaSetMax(255);
UpdateAllViews(NULL);
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnCximageOpacity()
{
if (image==NULL) return;
DlgOpacity dlg;
dlg.m_level=image->AlphaGetMax();
if (dlg.DoModal()==IDOK){
SubmitUndo();
if (!image->AlphaIsValid()){
image->AlphaCreate();
}
image->AlphaSetMax(dlg.m_level);
}
UpdateAllViews(NULL);
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnCximageInvetalpha()
{
SubmitUndo();
image->AlphaInvert();
UpdateAllViews(NULL);
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnCximageAlphapalettetoggle()
{
SubmitUndo();
image->AlphaPaletteEnable(!image->AlphaPaletteIsEnabled());
UpdateAllViews(NULL);
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnCximageAlphastrip()
{
SubmitUndo();
RGBQUAD c={255,255,255,0};
image->SetTransColor(c);
image->AlphaStrip();
UpdateAllViews(NULL,WM_USER_NEWIMAGE);
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnCximageGamma()
{
if (image==NULL) return;
DlgGamma dlg;
dlg.m_gamma=(float)1.23;
if (dlg.DoModal()==IDOK){
m_MenuCommand=ID_CXIMAGE_GAMMA;
m_fp[0]=(void *)(long)(dlg.m_gamma*1000);
hThread=(HANDLE)_beginthread(RunCxImageThread,0,this);
}
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnCximageMedian()
{
m_MenuCommand=ID_CXIMAGE_MEDIAN;
hThread=(HANDLE)_beginthread(RunCxImageThread,0,this);
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnCximageAddnoise()
{
m_MenuCommand=ID_CXIMAGE_ADDNOISE;
hThread=(HANDLE)_beginthread(RunCxImageThread,0,this);
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnViewToolsMove()
{
m_tool=0;
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnUpdateViewToolsMove(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(m_tool==0);
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnViewToolsSelect()
{
m_tool=1;
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnUpdateViewToolsSelect(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(m_tool==1);
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnViewToolsZoom()
{
m_tool=2;
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnUpdateViewToolsZoom(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(m_tool==2);
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnViewToolsText()
{
if (image==NULL) return;
DlgText dlg;
#ifndef VATI_EXTENSIONS
memcpy(&(dlg.m_font),&m_font,sizeof(m_font));
dlg.m_text=m_text;
dlg.m_color=m_color;
if (dlg.DoModal()==IDOK){
m_text=dlg.m_text;
m_color=dlg.m_color;
memcpy(&m_font,&(dlg.m_font),sizeof(m_font));
m_tool=3;
}
#else
//pass all data about text
memcpy( &(dlg.m_textdata), &theApp.m_text, sizeof(CxImage::CXTEXTINFO) );
if (dlg.DoModal()==IDOK)
{
//retrieve all data about text
memcpy( &theApp.m_text, &(dlg.m_textdata), sizeof(CxImage::CXTEXTINFO) );
m_tool=3;
}
#endif
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnUpdateViewToolsText(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(m_tool==3);
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnUpdateViewPalette(CCmdUI* pCmdUI)
{
if(image==0 || hThread || image->GetNumColors()==0) pCmdUI->Enable(0);
}
//////////////////////////////////////////////////////////////////////////////
void CDemoDoc::OnViewPalette()
{
if (image==NULL) return;
DlgPalette dlg;
dlg.m
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?