123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901 |
- // CutPhoto.cpp : implementation file
- //
- #include "stdafx.h"
- #include "ylgl.h"
- #include "CutPhoto.h"
- #include "SetSize.h"
- #include "ShowCut.h"
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
- /////////////////////////////////////////////////////////////////////////////
- // CutPhoto dialog
- CutPhoto::CutPhoto(CWnd* pParent /*=NULL*/): CDialog(CutPhoto::IDD, pParent)
- {
- m_pImg = NULL;
- m_width = 0;
- m_height = 0;
- m_fscale = 1.0;
- m_slider1 = 0;
- m_fZoomScale = 0.0;
- }
- void CutPhoto::DoDataExchange(CDataExchange* pDX)
- {
- CDialog::DoDataExchange(pDX);
- DDX_Control(pDX, IDC_SLIDER1, m_sliderctrl);
- DDX_Control(pDX, IDC_COMBO1, m_combo1);
- DDX_Slider(pDX, IDC_SLIDER1, m_slider1);
- }
- BEGIN_MESSAGE_MAP(CutPhoto, CDialog)
- ON_WM_PAINT()
- ON_BN_CLICKED(IDC_BUTTON7, OnButton7)
- ON_CBN_SELCHANGE(IDC_COMBO1, OnSelchangeCombo1)
- ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
- ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
- ON_BN_CLICKED(IDC_BUTTON3, OnButton3)
- ON_BN_CLICKED(IDC_BUTTON4, OnButton4)
- ON_BN_CLICKED(IDC_BUTTON5, OnButton5)
- ON_BN_CLICKED(IDC_BUTTON6, OnButton6)
- ON_BN_CLICKED(IDC_BUTTON10, OnButton10)
- ON_BN_CLICKED(IDC_BUTTON32, OnButton32)
- ON_NOTIFY(NM_CUSTOMDRAW, IDC_SLIDER1, OnCustomdrawSlider1)
- ON_NOTIFY(NM_OUTOFMEMORY, IDC_SLIDER1, OnOutofmemorySlider1)
- ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_SLIDER1, OnReleasedcaptureSlider1)
- ON_WM_MOUSEWHEEL()
- ON_WM_LBUTTONUP()
- ON_WM_LBUTTONDOWN()
- END_MESSAGE_MAP()
- BOOL CutPhoto::OnInitDialog()
- {
- CDialog::OnInitDialog();
- g_sendhead.bsql = 0;
- g_sendhead.code[0] = 11;
- g_sendhead.code[1] = 174;
- g_sendhead.tabcount = 2;
- CString filter = "id='" + m_strOrderNumber + "';";
- g_pMainWnd->ProcessChatMessageRequest2(filter);
- if (g_bSendOK == 0)
- {
- CDialog::OnCancel();
- return 0;
- }
- CArray<CStringArray, CStringArray>m_List1array;
- DataToArray(&m_List1array, &g_List1array);
- CenterWindow();
- if (m_List1array.GetSize())m_size = m_List1array.ElementAt(0).ElementAt(60);
- m_sliderctrl.SetRange(0, 50);
- m_combo1.ResetContent();
- namearray.RemoveAll();
- widtharray.RemoveAll();
- heightarray.RemoveAll();
- for (int i = 0; i < g_List1array.GetSize(); i++)
- {
- namearray.Add(g_List1array.ElementAt(i).ElementAt(0));
- widtharray.Add(atoi(g_List1array.ElementAt(i).ElementAt(1)));
- heightarray.Add(atoi(g_List1array.ElementAt(i).ElementAt(2)));
- CString str;
- str.Format(_T("%s 宽:%d 高:%d"), g_List1array.ElementAt(i).ElementAt(0), atoi(g_List1array.ElementAt(i).ElementAt(1)), atoi(g_List1array.ElementAt(i).ElementAt(2)));
- m_combo1.AddString(str);
- }
- #if JEFF_TEST_ON
- GetDlgItem(IDC_STATIC1)->GetWindowRect(m_rcStatc1);
- ScreenToClient(m_rcStatc1);
- GetDlgItem(IDC_STATIC2)->GetWindowRect(m_rcStatc2);
- ScreenToClient(m_rcStatc2);
- #endif
- if (m_combo1.GetCount())
- {
- m_combo1.SetCurSel(0);
- OnSelchangeCombo1();
- }
- return TRUE;
- }
- #if JEFF_TEST_ON
- //--------------------------------------------------------------------------------------------
- // Add by Jeff 2014.11.12
- // 函数:
- // 描述:获取缩放比例;
- // 参数:
- // nSrcImgWidth:原图宽;
- // nSrcImgHeight:原图高;
- // rcImgDisplay:显示图片的缩放区域,也是要重新按缩放比例调整位置的区域;
- // 返回:返回缩放比例;
- //--------------------------------------------------------------------------------------------
- float GetZoomScale(IN const int &nSrcImgWidth,IN const int &nSrcImgHeight,IN OUT CRect &rcImgDisplay)
- {
- float fZoomScale = 0.0;
- float fWidthZoom = 0.0;
- float fHeightZoom = 0.0;
- fWidthZoom = (float)nSrcImgWidth / rcImgDisplay.Width();
- fHeightZoom = (float)nSrcImgHeight / rcImgDisplay.Height();
- int nDifferValue = 0; //相差值;
- fZoomScale = (fWidthZoom > fHeightZoom) ? fWidthZoom : fHeightZoom;
- if (fWidthZoom > fHeightZoom) // rcImgDisplay 宽不变,重新计算缩放高度值;
- {
- // 显示区域原高 - 缩放后的高 = 差值;
- nDifferValue = (rcImgDisplay.Height() - nSrcImgHeight / fZoomScale) / 2;
- rcImgDisplay.top += nDifferValue;
- rcImgDisplay.bottom -= nDifferValue;
- }
- else // rcImgDisplay 高不变,重新计算缩放宽值;
- {
- // 显示区域原宽 - 缩放后的宽 = 差值;
- nDifferValue = (rcImgDisplay.Width() - nSrcImgWidth / fZoomScale) / 2;
- rcImgDisplay.left += nDifferValue;
- rcImgDisplay.right -= nDifferValue;
- }
- return fZoomScale;
- }
- #endif
- void CutPhoto::OnPaint()
- {
- CPaintDC dc(this); // device context for painting
- #if JEFF_TEST_ON
- if ( m_width && m_height )
- {
- // 先绘制裁剪区域---------------------------------------------------------------------------------------------------------
- Graphics graph(dc.GetSafeHdc());
- // 1.创建LinearGradientBrush(渐变画刷),主要功能是使用线性渐变绘制区域。
- LinearGradientBrush linGrBrush(
- Point(0, 0),
- Point(1.44*max(m_rcShowCutImage.Width(), m_rcShowCutImage.Height()), 1.44*max(m_rcShowCutImage.Width(), m_rcShowCutImage.Height())),
- Color(255, 255, 250, 156), // opaque blue
- Color(255, 176, 125, 44)); // opaque green
- // 2.用渐变画刷填充缩放区域;
- graph.FillRectangle(&linGrBrush, m_rcShowCutImage.left, m_rcShowCutImage.top, m_rcShowCutImage.Width(), m_rcShowCutImage.Height());
- // 3.DeflateRect通过将CRect的边向其中心移动来缩小它。
- m_rcShowCutImage.DeflateRect(m_slider1, m_slider1, m_slider1, m_slider1);
- // 4.rcCutting通过GetZoomScale计算后,在原图中的实际裁剪坐标;也是要保存的坐标值
- CRect rcCutting(0, 0, m_pImg->GetWidth(), m_pImg->GetHeight());
- GetZoomScale(m_rcShowCutImage.Width(), m_rcShowCutImage.Height(), rcCutting);
- m_photorcbak = rcCutting;
- if (m_rcRealCuttingArea.right == 0) // m_photorc为裁剪尺寸;
- m_rcRealCuttingArea = rcCutting;
- else
- rcCutting = m_rcRealCuttingArea;
- graph.DrawImage(m_pImg, Rect(m_rcShowCutImage.left, m_rcShowCutImage.top, m_rcShowCutImage.Width(), m_rcShowCutImage.Height()), rcCutting.left, rcCutting.top, rcCutting.Width(), rcCutting.Height(), UnitPixel);
- // Draw3dRect:调用该成员函数绘制三维矩形。该矩形的顶部、左侧颜色由clrTopLeft指定,底部和右侧颜色由clrBottomRight指定。
- if (m_slider1 == 0)
- dc.Draw3dRect(m_rcShowCutImage, RGB(255, 0, 0), RGB(255, 0, 0));
- // 绘制小图区域---------------------------------------------------------------------------------------------------------
- graph.DrawImage(m_pImg, Rect(m_rtSmall.left,m_rtSmall.top,m_rtSmall.Width(),m_rtSmall.Height()), 0, 0, m_pImg->GetWidth(), m_pImg->GetHeight(), UnitPixel);
- // 将rcCutting映射到小图上,需要用到小图到大图的缩放比例值fZoomScale;
- rcCutting.left = m_rcRealCuttingArea.left / m_fZoomScale + m_rtSmall.left;
- rcCutting.top = m_rcRealCuttingArea.top / m_fZoomScale + m_rtSmall.top;
- rcCutting.right = rcCutting.left + m_rcRealCuttingArea.Width() / m_fZoomScale;
- rcCutting.bottom = rcCutting.top + m_rcRealCuttingArea.Height() / m_fZoomScale;
-
- dc.Draw3dRect(rcCutting, RGB(0, 0, 255), RGB(0, 0, 255));
- }
- #else
- if (m_width && m_height)
- {
- // 1.获取控件客户区域,并从屏幕坐标转化客户坐标;
- CRect rc;
- GetDlgItem(IDC_STATIC1)->GetWindowRect(rc);
- ScreenToClient(rc);
- m_rcShowCutImage = rc;
- // 2.计算控件客户区域与原图片大小的缩放比例值,从而得出一个按比例缩放的CRect对象;
- RectFitDes(m_width, m_height, m_rcShowCutImage);
- Graphics graph(dc.GetSafeHdc());
- // 3.创建LinearGradientBrush(渐变画刷),主要功能是使用线性渐变绘制区域。
- LinearGradientBrush linGrBrush(
- Point(0, 0),
- Point(1.44*max(m_rcShowCutImage.Width(), m_rcShowCutImage.Height()), 1.44*max(m_rcShowCutImage.Width(), m_rcShowCutImage.Height())),
- Color(255, 255, 250, 156), // opaque blue
- Color(255, 176, 125, 44)); // opaque green
- // 4.用渐变画刷填充缩放区域;
- graph.FillRectangle(&linGrBrush, m_rcShowCutImage.left, m_rcShowCutImage.top, m_rcShowCutImage.Width(), m_rcShowCutImage.Height());
- // 5.DeflateRect通过将CRect的边向其中心移动来缩小它。
- // 为了做到这一点,DeflateRect将单位数增加到矩形的左边和上边,从右边和下边减去单位数。
- // DeflateRect的参数是有符号的值;正值缩小CRect,而负值则放大它。
- // dc.FillSolidRect (m_paintrc, RGB(234,208,98));
- m_rcShowCutImage.DeflateRect(m_slider1, m_slider1, m_slider1, m_slider1);
- rc = m_rcShowCutImage; // 保存缩小后的缩放区域;
- // 6.使用小图(m_pImg是"s"小图)生成一个CRect区域对象,与缩放区域做参数计算出小图合适的缩放区域;
- CRect rc2(0, 0, m_pImg->GetWidth(), m_pImg->GetHeight());
- RectFitDes(rc.Width(), rc.Height(), rc2);
- m_photorcbak = rc2;
- if (m_rcRealCuttingArea.right == 0) // m_photorc为裁剪尺寸;
- {
- m_rcRealCuttingArea = rc2;
- }
- else
- {
- rc2 = m_rcRealCuttingArea;
- }
- // 这里m_pImg又疑为大图,而非小图;
- Rect destinationRect(rc.left, rc.top, rc.Width(), rc.Height());
- graph.DrawImage(m_pImg, destinationRect, rc2.left, rc2.top, rc2.Width(), rc2.Height(), UnitPixel);
- // Draw3dRect:调用该成员函数绘制三维矩形。该矩形的顶部、左侧颜色由clrTopLeft指定,底部和右侧颜色由clrBottomRight指定。
- if (m_slider1 == 0)
- dc.Draw3dRect(m_rcShowCutImage, RGB(255, 0, 0), RGB(255, 0, 0));
- ///////////////////
- {
- // 获取左上角小区域的显示效果;
- GetDlgItem(IDC_STATIC2)->GetWindowRect(rc);
- ScreenToClient(rc);
- RectFitDes(m_pImg->GetWidth(), m_pImg->GetHeight(), rc);
- Rect destinationRect(rc.left, rc.top, rc.Width(), rc.Height());
- graph.DrawImage(m_pImg, destinationRect, 0, 0, m_pImg->GetWidth(), m_pImg->GetHeight(), UnitPixel);
- float scale = (float)rc.Width() / (float)m_pImg->GetWidth();
- rc2.left *= scale;
- rc2.right *= scale;
- rc2.top *= scale;
- rc2.bottom *= scale;
- rc2.left += rc.left;
- rc2.right += rc.left;
- rc2.top += rc.top;
- rc2.bottom += rc.top;
- dc.Draw3dRect(rc2, RGB(255, 0, 0), RGB(255, 0, 0));
- }
- }
- #endif
- // Do not call CDialog::OnPaint() for painting messages
- }
- void CutPhoto::OnButton7() // 设置按钮;
- {
- SetSize dlg;
- dlg.DoModal();
- GetSize();
- }
- void CutPhoto::GetSize()
- {
- g_sendhead.bsql = 0;
- g_sendhead.code[0] = 174;
- g_sendhead.tabcount = 1;
- g_pMainWnd->ProcessChatMessageRequest2(6);
- if (g_bSendOK == 0)
- {
- return;
- }
- DataToArray(&g_List1array);
- CenterWindow();
- m_combo1.ResetContent();
- namearray.RemoveAll();
- widtharray.RemoveAll();
- heightarray.RemoveAll();
- for (int i = 0; i < g_List1array.GetSize(); i++)
- {
- namearray.Add(g_List1array.ElementAt(i).ElementAt(0));
- widtharray.Add(atoi(g_List1array.ElementAt(i).ElementAt(1)));
- heightarray.Add(atoi(g_List1array.ElementAt(i).ElementAt(2)));
- CString str;
- str.Format(_T("%s 宽:%d 高:%d"), g_List1array.ElementAt(i).ElementAt(0), atoi(g_List1array.ElementAt(i).ElementAt(1)), atoi(g_List1array.ElementAt(i).ElementAt(2)));
- m_combo1.AddString(str);
- }
- if (m_combo1.GetCount())
- {
- m_combo1.SetCurSel(0);
- OnSelchangeCombo1();
- }
- }
- void CutPhoto::OnSelchangeCombo1()
- {
- int pos = m_combo1.GetCurSel();
- if (pos == -1)return;
- m_rcRealCuttingArea.right = 0;
- m_fscale = 1.0;
- m_width = widtharray.ElementAt(pos); // 裁剪方案 宽值;
- m_height = heightarray.ElementAt(pos); // 裁剪方案 高值;
- m_name = namearray.ElementAt(pos); // 裁剪方案 名称;
- CString header = m_strImgName + ":" + m_name + ",";
- pos = m_size.Find(header);
- if (pos != -1)
- {
- CString str = m_size.Right(m_size.GetLength() - pos);
- CString size = str.Left(str.Find(";"));
- int pos = size.Find(":");
- if (pos != -1)
- {
- CRect rc, rc2;
- str = size.Left(pos);
- str = size.Right(size.GetLength() - pos - 1);
- pos = str.Find(",");
- str.Delete(0, pos + 1);
- // rc原图
- pos = str.Find(",");
- rc.left = atoi(str.Left(pos)); str.Delete(0, pos + 1);
- pos = str.Find(",");
- rc.top = atoi(str.Left(pos)); str.Delete(0, pos + 1);
- // rc2实际裁剪区域;
- pos = str.Find(",");
- rc2.left = atoi(str.Left(pos)); str.Delete(0, pos + 1);
- pos = str.Find(",");
- rc2.top = atoi(str.Left(pos)); str.Delete(0, pos + 1);
- pos = str.Find(",");
- rc2.right = atoi(str.Left(pos)); str.Delete(0, pos + 1);
- rc2.bottom = atoi(str);
- #if JEFF_TEST_ON
- //CRect rc;
- //GetDlgItem(IDC_STATIC1)->GetWindowRect(rc);
- //ScreenToClient(rc);
- //GetZoomScale(m_width,m_height,rc);
- //GetZoomScale(m_width,m_height,rc2);
- #else
- // 小图宽 / 原图宽 = 缩放比例;
- float scale = (float)m_pImg->GetWidth() / (float)rc.left;
- // rc2为实际裁剪区域;
- rc2.left *= scale;
- rc2.right *= scale;
- rc2.top *= scale;
- rc2.bottom *= scale;
- m_rcRealCuttingArea = rc2;
- #endif
- }
- }
- #if JEFF_TEST_ON
- m_rtSmall = m_rcStatc2;
- m_rcShowCutImage = m_rcStatc1;
- GetZoomScale(m_width, m_height, m_rcShowCutImage);
- m_fZoomScale = GetZoomScale(m_pImg->GetWidth(), m_pImg->GetHeight(), m_rtSmall);
- #endif
- RefreshRc();
- }
- void CutPhoto::OnButton1() // 放大按钮;应该以矩形中心点向外;
- {
- #if JEFF_TEST_OFF
- #if 0
- // 正切值;
- float fTanx = m_rcRealCuttingArea.Width() / m_rcRealCuttingArea.Height();
- float lhOffSet = 5.0; // 水平移动的像素;
- // 根据fTanx值计算出垂直移动的像素;
- float lvOffSet = lhOffSet / fTanx;
- RectF rcTemp(m_rcRealCuttingArea.left,m_rcRealCuttingArea.top,m_rcRealCuttingArea.Width(),m_rcRealCuttingArea.Height());
- if (rcTemp.GetRight() == 0)return;
- rcTemp.X += lhOffSet;
- rcTemp.Width -= lhOffSet*2;
- rcTemp.Y += lvOffSet;
- rcTemp.Height -= lvOffSet*2;
- //if ((rcTemp.X + rcTemp.Width >= m_pImg->GetWidth()) || (m_pImg->GetHeight() <= rcTemp.Y+rcTemp.Height) || rcTemp.X <= 0 || rcTemp.Y <= 0)
- //if (rcTemp.X >= (rcTemp.X+rcTemp.Width))
- if (0)
- {
- AfxMessageBox("亲,已放最大啦~");
- return;
- }
- else
- {
- m_rcRealCuttingArea.left = rcTemp.X;
- m_rcRealCuttingArea.top = rcTemp.Y;
- m_rcRealCuttingArea.right = m_rcRealCuttingArea.left + rcTemp.Width;
- m_rcRealCuttingArea.bottom = m_rcRealCuttingArea.top + rcTemp.Height;
- //m_rcRealCuttingArea.SetRect(rcTemp.GetLeft(),rcTemp.GetTop(),rcTemp.GetRight(),rcTemp.GetBottom());
- }
- #else
- // 正切值;
- float fTanx = m_rcRealCuttingArea.Width() / m_rcRealCuttingArea.Height();
- LONG lhOffSet = 2; // 水平移动的像素;
- // 根据fTanx值计算出垂直移动的像素;
- LONG lvOffSet = lhOffSet/fTanx;
- CRect rcTemp = m_rcRealCuttingArea;
- if (rcTemp.right == 0)return;
- rcTemp.left += lhOffSet;
- rcTemp.right -= lhOffSet;
- rcTemp.top += lvOffSet;
- rcTemp.bottom -= lvOffSet;
- if ( fTanx >= 1) // 纵向;
- {
- lvOffSet = 2;
- lhOffSet = lvOffSet*fTanx;
- if ( rcTemp.Width() <= lhOffSet)
- {
- AfxMessageBox("已放最大");
- }
- else
- {
- m_rcRealCuttingArea = rcTemp;
- }
- }
- else // 横向;
- {
- lhOffSet = 2;
- lvOffSet = lhOffSet / fTanx;
- if (rcTemp.Height() <= lvOffSet)
- {
- AfxMessageBox("已放最大");
- }
- else
- {
- m_rcRealCuttingArea = rcTemp;
- }
-
- }
- #endif
- #else
- #if 1
- CRect rcTemp = m_rcRealCuttingArea;
- if (rcTemp.right == 0)return;
- float fScale = 1.05; // 1.2
- int dt = rcTemp.Width() - rcTemp.Width() / fScale;
- dt /= 2;
- rcTemp.left += dt;
- rcTemp.right -= dt;
- if (rcTemp.left < 0)rcTemp.left = 0;
- if (rcTemp.right > m_photorcbak.right)rcTemp.right = m_photorcbak.right;
- dt = rcTemp.Height() - rcTemp.Height() / fScale;
- dt /= 2;
- rcTemp.top += dt;
- rcTemp.bottom = rcTemp.top + rcTemp.Width()*m_photorcbak.Height() / m_photorcbak.Width();
- if (rcTemp.top < 0)rcTemp.top = 0;
- if (rcTemp.bottom > m_photorcbak.bottom)rcTemp.bottom = m_photorcbak.bottom;
- if ((rcTemp.Width() >= m_pImg->GetWidth()) || (m_pImg->GetHeight() <= rcTemp.Height()))
- {
- //AfxMessageBox("亲,已放最大啦~");
- return;
- }
- else
- {
- m_rcRealCuttingArea = rcTemp;
- }
- #else
- if (m_rcRealCuttingArea.right == 0)return;
- float fScale = 1.2; // 1.2
- int dt = m_rcRealCuttingArea.Width() - m_rcRealCuttingArea.Width() / fScale;
- dt /= 2;
- m_rcRealCuttingArea.left += dt;
- m_rcRealCuttingArea.right -= dt;
- if (m_rcRealCuttingArea.left < 0)m_rcRealCuttingArea.left = 0;
- if (m_rcRealCuttingArea.right > m_photorcbak.right)m_rcRealCuttingArea.right = m_photorcbak.right;
- dt = m_rcRealCuttingArea.Height() - m_rcRealCuttingArea.Height() / fScale;
- dt /= 2;
- m_rcRealCuttingArea.top += dt;
- m_rcRealCuttingArea.bottom = m_rcRealCuttingArea.top + m_rcRealCuttingArea.Width()*m_photorcbak.Height() / m_photorcbak.Width();
- if (m_rcRealCuttingArea.top < 0)m_rcRealCuttingArea.top = 0;
- if (m_rcRealCuttingArea.bottom > m_photorcbak.bottom)m_rcRealCuttingArea.bottom = m_photorcbak.bottom;
- #endif
- #endif
- RefreshRc();
- }
- void CutPhoto::OnButton2() // 缩小按钮 - 缩小到一定程序,禁止缩小,否则会变形;
- {
- #if JEFF_TEST_OFF // 这里控制会产生错误;
- #if 1
- // 正切值;
- float fTanx = m_rcRealCuttingArea.Width() / m_rcRealCuttingArea.Height();
- float lhOffSet = 5.0; // 水平移动的像素;
- // 根据fTanx值计算出垂直移动的像素;
- float lvOffSet = lhOffSet / fTanx;
- RectF rcTemp(m_rcRealCuttingArea.left, m_rcRealCuttingArea.top, m_rcRealCuttingArea.Width(), m_rcRealCuttingArea.Height());
- if (rcTemp.GetRight() == 0)return;
- rcTemp.X -= lhOffSet;
- rcTemp.Width += lhOffSet*2;
- rcTemp.Y -= lvOffSet;
- rcTemp.Height += lvOffSet*2;
- if ((rcTemp.X + rcTemp.Width >= m_pImg->GetWidth()) || (m_pImg->GetHeight() <= rcTemp.Y + rcTemp.Height) || rcTemp.X <= 0 || rcTemp.Y <= 0)
- {
- AfxMessageBox("亲,已最小啦~");
- return;
- }
- else
- {
- m_rcRealCuttingArea.left = rcTemp.GetLeft();
- m_rcRealCuttingArea.top = rcTemp.GetTop();
- m_rcRealCuttingArea.right = rcTemp.GetRight();
- m_rcRealCuttingArea.bottom = rcTemp.GetBottom();
- //m_rcRealCuttingArea.SetRect(rcTemp.GetLeft(),rcTemp.GetTop(),rcTemp.GetRight(),rcTemp.GetBottom());
- }
- #else
- // 正切值;
- float fTanx = m_rcRealCuttingArea.Width() / m_rcRealCuttingArea.Height();
- LONG lhOffSet = 5; // 水平移动的像素;
- // 根据fTanx值计算出垂直移动的像素;
- LONG lvOffSet = lhOffSet/fTanx;
- CRect rcTemp = m_rcRealCuttingArea;
- if (rcTemp.right == 0)return;
- rcTemp.left -= lhOffSet;
- rcTemp.right += lhOffSet;
- rcTemp.top -= lvOffSet;
- rcTemp.bottom += lvOffSet;
- if ((rcTemp.right >= m_pImg->GetWidth()) || (m_pImg->GetHeight() <= rcTemp.bottom) || rcTemp.left <= 0 || rcTemp.top <= 0 )
- {
- AfxMessageBox("亲,已最小啦~");
- return;
- }
- else
- {
- m_rcRealCuttingArea = rcTemp;
- }
- #endif
- #else
- #if 1
- CRect rcTemp = m_rcRealCuttingArea;
- if (rcTemp.right == 0)return;
- float fScale = 0.95;
- int dt = rcTemp.Width() - rcTemp.Width()*fScale;
- dt /= 2;
- rcTemp.left -= dt;
- rcTemp.right += dt;
- if (rcTemp.left < 0)rcTemp.left = 0;
- if (rcTemp.right > m_photorcbak.right)rcTemp.right = m_photorcbak.right;
- dt = rcTemp.Height() - rcTemp.Height()*fScale;
- dt /= 2;
- rcTemp.top -= dt;
- rcTemp.bottom = rcTemp.top + rcTemp.Width()*m_photorcbak.Height() / m_photorcbak.Width();
- if (rcTemp.top < 0)rcTemp.top = 0;
- if (rcTemp.bottom > m_photorcbak.bottom)rcTemp.bottom = m_photorcbak.bottom;
- if ((rcTemp.Width() >= m_pImg->GetWidth()) || (m_pImg->GetHeight() <= rcTemp.Height()))
- {
- //AfxMessageBox("亲,已最小啦~");
- return;
- }
- else
- {
- m_rcRealCuttingArea = rcTemp;
- }
- #else
- if (m_rcRealCuttingArea.right == 0)return;
- int dt = m_rcRealCuttingArea.Width() - m_rcRealCuttingArea.Width()*0.8;
- dt /= 2;
- m_rcRealCuttingArea.left -= dt;
- m_rcRealCuttingArea.right += dt;
- if (m_rcRealCuttingArea.left < 0)m_rcRealCuttingArea.left = 0;
- if (m_rcRealCuttingArea.right > m_photorcbak.right)m_rcRealCuttingArea.right = m_photorcbak.right;
- dt = m_rcRealCuttingArea.Height() - m_rcRealCuttingArea.Height()*0.8;
- dt /= 2;
- m_rcRealCuttingArea.top -= dt;
- m_rcRealCuttingArea.bottom = m_rcRealCuttingArea.top + m_rcRealCuttingArea.Width()*m_photorcbak.Height() / m_photorcbak.Width();
- if (m_rcRealCuttingArea.top < 0)m_rcRealCuttingArea.top = 0;
- if (m_rcRealCuttingArea.bottom > m_photorcbak.bottom)m_rcRealCuttingArea.bottom = m_photorcbak.bottom;
- #endif
- #endif
- RefreshRc();
- }
- void CutPhoto::OnButton3() // 左 按钮;
- {
- if (m_rcRealCuttingArea.right == 0)return;
- int dt = m_photorcbak.Width() / 50; if (dt<1)dt = 1;
- if ((m_rcRealCuttingArea.right + dt)>(m_pImg->GetWidth() - 1))
- dt = m_pImg->GetWidth() - m_rcRealCuttingArea.right - 1;
- m_rcRealCuttingArea.left += dt;
- m_rcRealCuttingArea.right += dt;
- RefreshRc();
- }
- void CutPhoto::OnButton4() // 右按钮;
- {
- if (m_rcRealCuttingArea.right == 0)return;
- int dt = m_photorcbak.Width() / 50; if (dt < 1)dt = 1;
- if ((m_rcRealCuttingArea.left - dt) < 0)
- dt = m_rcRealCuttingArea.left;
- m_rcRealCuttingArea.left -= dt;
- m_rcRealCuttingArea.right -= dt;
- RefreshRc();
- }
- void CutPhoto::OnButton5() // 上 按钮;
- {
- if (m_rcRealCuttingArea.right == 0)return;
- int dt = m_photorcbak.Height() / 50; if (dt<1)dt = 1;
- if ((m_rcRealCuttingArea.bottom + dt)>(m_pImg->GetHeight() - 1))
- dt = m_pImg->GetHeight() - m_rcRealCuttingArea.bottom - 1;
- m_rcRealCuttingArea.top += dt;
- m_rcRealCuttingArea.bottom += dt;
- RefreshRc();
- }
- void CutPhoto::OnButton6() // 下 按钮;
- {
- if (m_rcRealCuttingArea.right == 0)return;
- int dt = m_photorcbak.Height() / 50; if (dt < 1)dt = 1;
- if ((m_rcRealCuttingArea.top - dt) < 0)
- dt = m_rcRealCuttingArea.top;
- m_rcRealCuttingArea.top -= dt;
- m_rcRealCuttingArea.bottom -= dt;
- RefreshRc();
- }
- void CutPhoto::RefreshRc()
- {
- UpdateData();
- CRect rc;
- GetDlgItem(IDC_STATIC1)->GetWindowRect(rc);
- ScreenToClient(rc);
- InvalidateRect(rc);
- GetDlgItem(IDC_STATIC2)->GetWindowRect(rc);
- ScreenToClient(rc);
- InvalidateRect(rc);
- }
- void CutPhoto::OnButton10() // 保存按钮;
- {
- if (!(m_width && m_height))
- {
- AfxMessageBox("请选择尺寸!");
- return;
- }
- CString str;
- str.Format("%s:%s,%d,%d,%d,%d,%d,%d;", m_strImgName, m_name, m_pImg->GetWidth(), m_pImg->GetHeight(), m_rcRealCuttingArea.left, m_rcRealCuttingArea.top, m_rcRealCuttingArea.right, m_rcRealCuttingArea.bottom);
- int pos;
- CString header = m_strImgName + ":" + m_name + ",";
- pos = m_size.Find(header);
- if (pos != -1)
- {
- CString left, right;
- left = m_size.Left(pos);
- m_size = m_size.Right(m_size.GetLength() - pos - header.GetLength());
- pos = m_size.Find(";");
- right = m_size.Right(m_size.GetLength() - pos - 1);
- m_size = left + right;
- }
- m_size += str;
- CString sql;
- sql.Format("update dindan set size='%s' where id='%s'", m_size, m_strOrderNumber);
- g_sendhead.bsql = 1;
- g_pMainWnd->ProcessChatMessageRequest2(sql);
- if (g_bSendOK == 0)return;
- AfxMessageBox("保存成功!");
- // CDialog::OnCancel ();
- }
- void CutPhoto::OnButton32() // 查看剪裁按钮;
- {
- ShowCut dlg;
- dlg.m_id = m_strOrderNumber;
- dlg.DoModal();
- g_sendhead.bsql = 0;
- g_sendhead.code[0] = 11;
- g_sendhead.tabcount = 1;
- CString filter = "id='" + m_strOrderNumber + "';";
- g_pMainWnd->ProcessChatMessageRequest2(filter);
- if (g_bSendOK == 0)
- {
- CDialog::OnCancel();
- return;
- }
- CArray<CStringArray, CStringArray>m_List1array;
- DataToArray(&m_List1array);
- CenterWindow();
- if (m_List1array.GetSize())
- {
- m_size = m_List1array.ElementAt(0).ElementAt(60);
- }
- }
- void CutPhoto::OnCustomdrawSlider1(NMHDR* pNMHDR, LRESULT* pResult)
- {
- *pResult = 0;
- }
- void CutPhoto::OnOutofmemorySlider1(NMHDR* pNMHDR, LRESULT* pResult)
- {
- *pResult = 0;
- }
- void CutPhoto::OnReleasedcaptureSlider1(NMHDR* pNMHDR, LRESULT* pResult)
- {
- RefreshRc();
- *pResult = 0;
- }
- BOOL CutPhoto::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
- {
- //-----------------------------------------------------------------------------------------
- // 1.判断鼠标是否在客户区域内,不在退出;
- // 2.获取客户区域,进而计算出中心点Center(x,y).
- // 3.若鼠标滚轮向下,以中心点为轴心缩小操作,缩放尺寸为1个像素点,定义宏#define ZOOMSIZE 1L;
- // 4.若鼠标滚轮向上,以中心点为轴心放大操作,缩放尺寸为1个像素点,定义宏#define ZOOMSIZE 1L;
- //-----------------------------------------------------------------------------------------
- ScreenToClient(&pt);
- if (m_rcShowCutImage.PtInRect(pt) == TRUE)
- {
- if ( zDelta > 0)
- {
- OnButton1();
- }
- else
- {
- OnButton2();
- }
- }
- return CDialog::OnMouseWheel(nFlags, zDelta, pt);
- }
- void CutPhoto::OnLButtonUp(UINT nFlags, CPoint point)
- {
- //ScreenToClient(&point);
- if (m_rcShowCutImage.PtInRect(point) == TRUE)
- {
- if (GetCapture() != this)
- return;
- ReleaseCapture();
- int a = abs(point.x - m_ptStart.x);
- int b = abs(point.y - m_ptStart.y);
- float tanX = 0.0;
- if (b != 0)
- tanX = a / b;
- // 求两点的正切值,对照正切表判断点区域;
- if ( point.x > m_ptStart.x && point.y <= m_ptStart.y) // point在m_ptStart的右上角;
- {
- if (b == 0)
- {
- OnButton4();
- }
- else
- {
- if (tanX < 1)
- {
- OnButton4(); // 右移;
- }
- else if (tanX >= 1)
- {
- OnButton5(); // 上移;
- }
- }
- }
- else if ( point.x <= m_ptStart.x && point.y < m_ptStart.y) // point在m_ptStart的左上角;
- {
- if (b == 0)
- {
- OnButton3();
- }
- else
- {
- if (tanX < 1)
- {
- OnButton5(); // 上移;
- }
- else if (tanX >= 1)
- {
- OnButton3(); // 左移;
- }
- }
- }
- else if ( point.x < m_ptStart.x && point.y >= m_ptStart.y ) // point在m_ptStart的左下角;
- {
- if (b == 0)
- {
- OnButton3();
- }
- else
- {
- if (tanX < 1)
- {
- OnButton6(); // 下移;
- }
- else if (tanX >= 1)
- {
- OnButton3(); // 左移;
- }
- }
- }
- else if ( point.x >= m_ptStart.x && point.y > m_ptStart.y) // point在m_ptStart的右下角;
- {
- if (b == 0)
- {
- OnButton4();
- }
- else
- {
- if (tanX < 1)
- {
- OnButton6(); // 下移;
- }
- else if (tanX >= 1)
- {
- OnButton4(); // 右移;
- }
- }
- }
- }
- CDialog::OnLButtonUp(nFlags, point);
- }
- void CutPhoto::OnLButtonDown(UINT nFlags, CPoint point)
- {
- //ScreenToClient(&point);
- if (m_rcShowCutImage.PtInRect(point) == TRUE)
- {
- GetDlgItem(IDC_STATIC1)->SetFocus();
- //AfxMessageBox(_T("按下在区域内"));
- SetCapture();
- m_ptStart = point;
- }
- CDialog::OnLButtonDown(nFlags, point);
- }
|