1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735 |
- // ShowPic22.cpp : implementation file
- //
- #include "stdafx.h"
- #include "ylgl.h"
- #include "ShowPic22.h"
- #include "MyLock.h"
- #include "ShowEffect.h"
- #include "CutPhoto.h"
- #include "ChoosePhotoBase.h"
- #define PCL_R(p) (((RGBQUAD*)(p))->rgbRed)
- #define PCL_G(p) (((RGBQUAD*)(p))->rgbGreen)
- #define PCL_B(p) (((RGBQUAD*)(p))->rgbBlue)
- #define PCL_A(p) (((RGBQUAD*)(p))->rgbReserved)
- /////////////////////////////////////////////////////////////////////////////
- HANDLE Lock(char* name)
- {
- try
- {
- HANDLE mutex;
- // Try to open an exist mutex firstly.
- mutex = OpenMutex(MUTEX_ALL_ACCESS, FALSE, name);
- if (NULL == mutex) // If the mutex does not exist, create it with the certain name.
- {
- mutex = CreateMutex(NULL, TRUE, name);
- }
- else // If the mutex already exist, wait for other thread release it.
- {
- WaitForSingleObject(mutex, INFINITE);
- }
- return mutex;
- }
- catch (...)
- {
- }
- }
- bool Unlock(HANDLE mutex)
- {
- try
- {
- if (0 == ReleaseMutex(mutex)) // Failed to release mutex
- {
- return false;
- }
- else // Successed in release mutex
- {
- CloseHandle(mutex);
- mutex = NULL;
- return true;
- }
- }
- catch (...)
- {
- }
- }
- ShowPic22::ShowPic22(CWnd* pParent) : CDialog(ShowPic22::IDD, pParent)
- {
- m_pCurShowImg = NULL;
- m_pCurShowSmallImg = NULL;
- m_pImagetemp = NULL;
- m_pbmp = NULL;
- m_pParent = NULL;
- m_bauto = 0;
- m_fscale = 1;
- m_bScroll = 0;
- m_bTerminate = false;
- m_bRunning = false;
- m_hThread = NULL;
- m_bProcessing = 0;
- m_bInit = 0;
- m_bShowImgInfo = 0;
- m_bShowEffect = 0;
- m_pAryImgPath = NULL;
- m_pAryOriginalImgPath = NULL;
- m_bChooseBig = 0;
- }
- void ShowPic22::DoDataExchange(CDataExchange* pDX)
- {
- CDialog::DoDataExchange(pDX);
- DDX_Control(pDX, IDC_STATIC1, m_sta1);
- }
- BEGIN_MESSAGE_MAP(ShowPic22, CDialog)
- ON_WM_PAINT()
- ON_WM_DESTROY()
- ON_WM_LBUTTONDOWN()
- ON_WM_LBUTTONUP()
- ON_WM_MOUSEWHEEL()
- ON_WM_ERASEBKGND()
- ON_WM_RBUTTONDOWN()
- ON_WM_TIMER()
- ON_WM_CLOSE()
- ON_WM_MOUSEMOVE()
- ON_WM_CTLCOLOR()
- ON_MESSAGE(WM_USER + 200, ShowInfo2)
- END_MESSAGE_MAP()
- /////////////////////////////////////////////////////////////////////////////
- BOOL ShowPic22::OnEraseBkgnd(CDC* pDC)
- {
- return 1;
- }
- unsigned __stdcall GenThumbImgThread(LPVOID lpParam)
- {
- try
- {
- ShowPic22 *pThis = (ShowPic22*)lpParam;
- int posbak = pThis->m_nCurImgPos; // m_pos 选片时选中的相片列编号,即要查看的相片;
-
- // 以下4个变量用途何为?
- int pos(0);
- BOOL bNext = 1; // 图片位置与posbak一致时保持不变;
- BOOL bFirst = 1; // 记录第一次运行的什么情况?
- int count(0); // 用于记录什么的数量?
- while (1)
- {
- // 对话框销毁,线程退出;
- if (pThis->m_bTerminate)
- break;
- // 播放幻灯或未初始化时,线程进入睡眠,让出CPU周期;
- if (pThis->m_bauto || (pThis->m_bInit == 0 && bFirst == 0))
- {
- ::Sleep(1000);
- continue;
- }
- if (bFirst)
- count = 2;
- else
- count = 10;
- bFirst = 0;
- for (int i = 0; i < count; i++)
- {
- if (pThis->m_bTerminate)break;
- if (pThis->m_bauto)break;
- if (posbak != pThis->m_nCurImgPos)
- {// 按下:下一张、上一张时;
- if (pThis->m_nCurImgPos > posbak)
- bNext = 1; // 按下下一张时;
- else
- bNext = 0; // 按下上一张时;
- posbak = pThis->m_nCurImgPos;
- // 按下:下一张、上一张时,重置为0;
- i = 0;
- continue;
- }
- if (bNext)
- {// 下一张时;
- switch (i)
- {
- case 0:
- pos = posbak;
- break;
- case 1:
- pos = posbak + 1;
- break;
- case 2:
- pos = posbak + 2;
- break;
- case 3:
- pos = posbak + 3;
- break;
- case 4:
- pos = posbak + 4;
- break;
- case 5:
- pos = posbak + 5;
- break;
- case 6:
- pos = posbak + 6;
- break;
- // 向后加载7张后,再加载前3张;
- case 7:
- pos = posbak - 1;
- break;
- case 8:
- pos = posbak - 2;
- break;
- case 9:
- pos = posbak - 3;
- break;
- }
- }
- else
- {// 上一张时;
- switch (i)
- {
- case 0:
- pos = posbak;
- break;
- case 1:
- pos = posbak - 1;
- break;
- case 2:
- pos = posbak - 2;
- break;
- case 3:
- pos = posbak - 3;
- break;
- case 4:
- pos = posbak - 4;
- break;
- case 5:
- pos = posbak - 5;
- break;
- case 6:
- pos = posbak - 6;
- break;
- // 向前加载7张后,再加载后3张;
- case 7:
- pos = posbak + 1;
- break;
- case 8:
- pos = posbak + 2;
- break;
- case 9:
- pos = posbak + 3;
- break;
- }
- }
- HANDLE handle = Lock("shgenimagethread");
- while (pos >= pThis->m_pAryImgPath->GetSize())
- pos -= pThis->m_pAryImgPath->GetSize();
- while (pos < 0)
- pos += pThis->m_pAryImgPath->GetSize();
- // 判断指定索引的相片路径是否被加载;
- BOOL bFind = 0;
- for (int n = 0; n < pThis->m_nPosArray.GetSize(); n++)
- {
- if (pos == pThis->m_nPosArray.ElementAt(n)){
- bFind = 1;
- break;
- }// if;
- }// for;
- if (bFind){
- Unlock(handle);
- continue;
- }// if;
- // 获取相片路径;
- CString path = pThis->m_pAryImgPath->ElementAt(pos);
- if (pThis->m_bChooseBig && pThis->m_nCurImgPos == pos)
- {
- path = pThis->m_pAryOriginalImgPath->ElementAt(pos);
- pThis->m_bChooseBig = 0;
- }
- // "m"图或大图,加载指定名称的原始图片;
- Image *pOriginalImg = NULL;
- // 缩放到窗口的缩略图;
- Image *pThumbNailImg = NULL;
- ::LoadImageFromBuf(&pOriginalImg, path);
- if (pOriginalImg == NULL)
- {// 如果加载相片失败,则使用空白图片代替;
- Bitmap *pNULLBmp = new Bitmap(100, 100, PixelFormat24bppRGB);
- Graphics graph2(pNULLBmp);
- graph2.Clear(Color(255, 0, 0, 0));
- Bitmap *pNULLBmp2 = new Bitmap(100, 100, PixelFormat24bppRGB);
- Graphics graph3(pNULLBmp2);
- graph3.Clear(Color(255, 0, 0, 0));
- pThis->m_AryOfImgPtr.Add(pNULLBmp);
- pThis->m_AryOfSmallImgPtr.Add(pNULLBmp2);
- pThis->m_nPosArray.Add(pos);
- Unlock(handle);
- continue;
- }
- if (pOriginalImg->GetWidth() == 0)
- {// 如果加载相片失败,则使用空白图片代替;
- Bitmap *pNULLBmp = new Bitmap(100, 100, PixelFormat24bppRGB);
- Graphics graph2(pNULLBmp);
- graph2.Clear(Color(255, 0, 0, 0));
- Bitmap *pNULLBmp2 = new Bitmap(100, 100, PixelFormat24bppRGB);
- Graphics graph3(pNULLBmp2);
- graph3.Clear(Color(255, 0, 0, 0));
- pThis->m_AryOfImgPtr.Add(pNULLBmp);
- pThis->m_AryOfSmallImgPtr.Add(pNULLBmp2);
- pThis->m_nPosArray.Add(pos);
- Unlock(handle);
- continue;
- }
- CRect rc;
- pThis->InitRc(pOriginalImg, rc); // 原始图自适应窗口大小;
- // GetThumbnailImage进行图片缩放操作;
- pThumbNailImg = pOriginalImg->GetThumbnailImage(rc.Width(), rc.Height(), NULL, NULL);
- Graphics graphic(pThumbNailImg);//防止GetThumbnailImage影响质量
- graphic.DrawImage(pOriginalImg, 0, 0, pThumbNailImg->GetWidth(), pThumbNailImg->GetHeight());
- int orientation = GetOrientation(pOriginalImg);
- if (orientation == 8)
- {
- pThumbNailImg->RotateFlip(Rotate270FlipNone);
- pOriginalImg->RotateFlip(Rotate270FlipNone);
- }
- else if (orientation == 6)
- {
- pThumbNailImg->RotateFlip(Rotate90FlipNone);
- pOriginalImg->RotateFlip(Rotate90FlipNone);
- }
- pThis->m_AryOfImgPtr.Add(pOriginalImg);
- pThis->m_AryOfSmallImgPtr.Add(pThumbNailImg);
- pThis->m_nPosArray.Add(pos);
- //10张图片缓存
- if (pThis->m_AryOfImgPtr.GetSize() > 10)
- {// 如果加载的图片超过10过,删除最早加载的第一张;
- if (pThis->m_pCurShowImg != pThis->m_AryOfImgPtr.ElementAt(0))
- {// 如果第一张不是当前显示的图片,从内存中删除掉;
- delete pThis->m_AryOfImgPtr.ElementAt(0);
- delete pThis->m_AryOfSmallImgPtr.ElementAt(0);
- pThis->m_AryOfImgPtr.RemoveAt(0);
- pThis->m_AryOfSmallImgPtr.RemoveAt(0);
- pThis->m_nPosArray.RemoveAt(0);
- }
- }
- Unlock(handle);
- }
- ::Sleep(200);
- }
- pThis->m_bRunning = false;
- pThis->m_bTerminate = false;
- _endthreadex(0);
- }
- catch (...)
- {
- }
- return 0;
- }
- BOOL ShowPic22::OnInitDialog() // 初始化;
- {
- CDialog::OnInitDialog();
- m_bShowImgInfo = 1;
- try
- {
- g_nSendCode = 0;
- RunPicThread();
- if (m_bShowImgInfo)
- GetDlgItem(IDC_STATIC2)->ShowWindow(SW_SHOW);
- m_rcScreen = CRect(0, 0, g_screenwid, g_screenhei);
- ::SetWindowPos(m_hWnd, HWND_TOP, 0, 0, g_screenwid, g_screenhei, SWP_SHOWWINDOW);
- // m_pbmp=new Bitmap(g_screenwid, g_screenhei, PixelFormat24bppRGB );
- m_pbmp = new Bitmap(g_screenwid, g_screenhei, PixelFormat32bppARGB);
- // LoadImage();
- if (m_pParent)
- m_pParent->m_showpichwd = m_hWnd;
- m_dlg.Create(IDD_DLGAnimateWindow, this);
- m_dlg.m_pParent = this;
- m_dlg.m_pbmp = m_pbmp;
- m_dlg.m_pRc = &m_rcImgShow;
- m_dlg.MoveWindow(m_rcScreen);
- if (m_PicBar.GetSafeHwnd() == NULL)
- {
- if (m_pParent == NULL)
- m_PicBar.m_bShowCut = 0;
- else if (m_pParent->m_Runingmode)
- m_PicBar.m_bShowCut = 0;
- m_PicBar.PreLoad();
- m_PicBar.SetLiaPath("4.lia");
- m_PicBar.Create(IDD_DLGmydlg, this);
- }
- if (m_PreviewDlg.GetSafeHwnd() == NULL)
- {
- m_PreviewDlg.Create(IDD_DIALOG30, this);
- CRect rc;
- rc.top = 50;
- rc.bottom = g_screenhei - 50;
- rc.right = g_screenwid - 10;
- rc.left = rc.right - 100;
- ///////////////////////////
- rc.left = g_screenwid - 20;
- rc.right = rc.left + 100;
- ///////////////////////////
- m_PreviewDlg.MoveWindow(rc);
- m_PreviewDlg.m_pPathArray = m_pAryImgPath;
- m_PreviewDlg.InitCtrl();
- }
- // m_PicBar.SetParent (this);
- if (m_PicBar.m_bInit)
- {
- m_PicBar.m_pParent = this;
- int hei;
- m_PicBar.GetWindowRect(m_picbarrc);
- hei = m_picbarrc.Height();
- m_picbarrc.bottom = g_screenhei - 10;
- m_picbarrc.top = m_picbarrc.bottom - hei;
- m_PicBar.MoveWindow(m_picbarrc);
- m_startpt2.x = m_startpt2.y = 0;
- }
- m_sta1.SetFocus();
- LoadImage();
- m_PreviewDlg.ShowWindow(SW_SHOW);
- }
- catch (...)
- {
- }
- return TRUE;
- }
- inline void RGBtoHLS(int R, int G, int B, double* H, double* L, double* S)
- {
- const int n_cmax = max(B, max(R, G)),
- n_cmin = min(B, min(R, G));
- *L = (n_cmax + n_cmin) / 2.0 / 255.0;
- if (n_cmax == n_cmin)
- {
- *S = *H = 0.0;
- return;
- }
- const double r = (double)R / 255.0,
- g = (double)G / 255.0,
- b = (double)B / 255.0,
- cmax = n_cmax / 255.0,
- cmin = n_cmin / 255.0,
- delta = cmax - cmin;
- if (*L < 0.5)
- *S = delta / (cmax + cmin);
- else
- *S = delta / (2.0 - cmax - cmin);
- if (R == n_cmax)
- *H = (g - b) / delta;
- else if (G == n_cmax)
- *H = 2.0 + (b - r) / delta;
- else
- *H = 4.0 + (r - g) / delta;
- *H /= 6.0;
- if (*H < 0.0)
- *H += 1.0;
- }
- RGBQUAD __DoubleRGB_to_RGB(const double& r, const double& g, const double& b)
- {
- RGBQUAD rgb;
- rgb.rgbRed = max(0, min(255, (int)r * 255));
- rgb.rgbGreen = max(0, min(255, (int)g * 255));
- rgb.rgbBlue = max(0, min(255, (int)b * 255));
- return rgb;
- }
- inline double __HLS_Value(const double& m1, const double& m2, double h)
- {
- if (h > 6.0)
- h -= 6.0;
- else if (h < 0.0)
- h += 6.0;
- if (h < 1.0)
- return m1 + (m2 - m1) * h;
- else if (h < 3.0)
- return m2;
- else if (h < 4.0)
- return m1 + (m2 - m1) * (4.0 - h);
- return m1;
- }
- inline RGBQUAD HLStoRGB(const double& H, const double& L, const double& S)
- {
- double m1, m2;
- if (L < 0.5)
- m2 = L * (1.0 + S);
- else
- m2 = L + S - L*S;
- m1 = 2.0*L - m2;
- return __DoubleRGB_to_RGB(__HLS_Value(m1, m2, H*6.0 + 2.0),
- __HLS_Value(m1, m2, H*6.0),
- __HLS_Value(m1, m2, H*6.0 - 2.0));
- }
- void Autocontrast(Bitmap *pBmpImage) // 自动对比;
- {
- return;
- try
- {
- if (pBmpImage == NULL)return;
- BitmapData bitmapData;
- UINT* pixels;
- Rect rc(0, 0, pBmpImage->GetWidth(), pBmpImage->GetHeight());
- pBmpImage->LockBits(
- rc,
- ImageLockModeWrite,
- PixelFormat32bppARGB,
- &bitmapData);
- // Write to the temporary buffer provided by LockBits. RGB
- pixels = (UINT*)bitmapData.Scan0;
- DWORD wids = bitmapData.Stride / 4;
- Color color;
- BYTE R, G, B;
- double H, L, S;
- int iPercent = 128 * 110 / 100; // 转换成x/128;
- int iPercentSat = 128 * 120 / 100; // 转换成x/128;
- RGBQUAD rgb2; RGBTRIPLE rgb;
- for (INT row = 0; row < rc.Height; ++row)
- {
- for (INT col = 0; col < rc.Width; ++col)
- {
- color.SetValue(pixels[row * wids + col]);
- R = min(255, max(0, 128 + (color.GetR() - 128) * iPercent / 128));
- G = min(255, max(0, 128 + (color.GetG() - 128) * iPercent / 128));
- B = min(255, max(0, 128 + (color.GetB() - 128) * iPercent / 128));
- rgb.rgbtRed = color.GetR();
- rgb.rgbtGreen = color.GetG();
- rgb.rgbtBlue = color.GetB();
- FCColor::RGBtoHLS(&rgb, &H, &L, &S);
- S = S * iPercentSat / 128;
- rgb2 = FCColor::HLStoRGB(H, L, S);
- pixels[row * wids + col] = Color::MakeARGB(255, rgb2.rgbRed, rgb2.rgbGreen, rgb2.rgbBlue);
- // pixels[row * wids + col]=Color::MakeARGB(255, R, G, B );
- }
- }
- pBmpImage->UnlockBits(&bitmapData);
- }
- catch (...)
- {
- }
- }
- void Autosaturation(Bitmap *pBmpImage) // 自动饱和;
- {
- #ifdef HIGH_VERSION
- try
- {
- if(pBmpImage==NULL)return;
- if(g_pMainWnd->m_pToneColorDlg2->m_saturation==100)return;
- BitmapData bitmapData;
- UINT* pixels;
- Rect rc(0, 0, pBmpImage->GetWidth(), pBmpImage->GetHeight() );
- pBmpImage->LockBits(
- rc,
- ImageLockModeWrite,
- PixelFormat32bppARGB ,
- &bitmapData);
- // Write to the temporary buffer provided by LockBits. RGB
- pixels = (UINT*)bitmapData.Scan0;
- DWORD wids=bitmapData.Stride/4;
- Color color;
- double H, L, S ;
- RGBTRIPLE rgb;
- RGBQUAD rgb2;
- int iPercentSat = 128 * g_pMainWnd->m_pToneColorDlg2->m_saturation / 100 ; // 转换成x/128
- for(INT row = 0; row < rc.Height; ++row)
- {
- for(INT col = 0; col < rc.Width; ++col)
- {
- color.SetValue(pixels[row * wids + col]);
- rgb.rgbtRed =color.GetR();
- rgb.rgbtGreen =color.GetG();
- rgb.rgbtBlue =color.GetB();
- FCColor::RGBtoHLS (&rgb, &H, &L, &S) ;
- S = S * iPercentSat / 128 ;
- rgb2 = FCColor::HLStoRGB (H, L, S) ;
- pixels[row * wids + col]=Color::MakeARGB(color.GetA(), rgb2.rgbRed, rgb2.rgbGreen, rgb2.rgbBlue );
- }
- }
- pBmpImage->UnlockBits(&bitmapData);
- }
- catch(...)
- {
- }
- #endif
- }
- void ShowPic22::OnPaint()
- {
- CPaintDC dc(this);
- try
- {
- CRect rc;
- GetClientRect(rc);
- if (m_pCurShowImg && m_bauto == 0)
- {// m_bauto 自动播放; m_pCurShowImg当前需要显示的相片指针;
- Graphics graph(m_pbmp);
- graph.Clear(Color(255, 0, 0, 0));
- Image *img;
- if (m_pImagetemp && m_bScroll == 0)
- img = m_pImagetemp;
- else
- img = m_pCurShowSmallImg;
- m_bScroll = 0;
- int width, height;
- width = img->GetWidth();
- height = img->GetHeight();
- ///////////////
- Rect destinationRect(m_rcImgShow.left, m_rcImgShow.top, m_rcImgShow.Width(), m_rcImgShow.Height());
- // graph.SetInterpolationMode(InterpolationModeHighQualityBicubic);
- graph.DrawImage(img, destinationRect, 0, 0, width, height, UnitPixel);
- Graphics graph2(dc.GetSafeHdc());
- Autocontrast(m_pbmp);
- graph2.DrawImage(m_pbmp, 0, 0);
- }
- else
- {
- // dc.FillSolidRect (rc, 0);
- }
- }
- catch (...)
- {
- }
- }
- void ShowPic22::OnDestroy()
- {
- try
- {
- g_nSendCode = 0;
- for (int n = 0; n < m_nPosArray.GetSize(); n++)
- {
- m_pCurShowImg = m_AryOfImgPtr.ElementAt(n);
- m_pCurShowSmallImg = m_AryOfSmallImgPtr.ElementAt(n);
- delete m_pCurShowImg;
- delete m_pCurShowSmallImg;
- }
- DELETEP(m_pImagetemp)
- DELETEP(m_pbmp)
- KillTimer(1);
- }
- catch (...)
- {
- }
- CDialog::OnDestroy();
- }
- void ShowPic22::LoadImage()
- {
- try
- {
- ::SetForegroundWindow(m_hWnd);
- KillTimer(5);
- if (m_pAryImgPath->GetSize() == 0)
- return;
- m_pCurShowImg = m_pCurShowSmallImg = NULL;
- for (int n = 0; n < m_nPosArray.GetSize(); n++){
- if (m_nCurImgPos == m_nPosArray.ElementAt(n)){
- m_pCurShowImg = m_AryOfImgPtr.ElementAt(n);
- m_pCurShowSmallImg = m_AryOfSmallImgPtr.ElementAt(n);
- break;
- }//if;
- }//for;
- if (m_pCurShowImg == NULL && (m_bauto || m_bInit == 0))
- {
- HANDLE handle = Lock("shgenimagethread");
- CString path = m_pAryImgPath->ElementAt(m_nCurImgPos);
- if (m_bChooseBig && m_pAryOriginalImgPath && m_pAryOriginalImgPath->GetSize() > m_nCurImgPos)
- {// 如果使用的是原图模式,加载原图;
- path = m_pAryOriginalImgPath->ElementAt(m_nCurImgPos);
- }
- // 从文件中加载图片;
- LoadImageFromBuf(&m_pCurShowImg, path);
- if (m_pCurShowImg == NULL)
- {//如果加载相片失败,使用空白图片代替;
- Bitmap *pNULLBmp = new Bitmap(100, 100, PixelFormat24bppRGB);
- Graphics graph2(pNULLBmp);
- graph2.Clear(Color(255, 0, 0, 0));
- m_pCurShowImg = pNULLBmp;
- }
- if (m_pCurShowImg->GetWidth() == 0)
- {
- m_bChooseBig = 0;
- Unlock(handle);
- return;
- }
- InitRc();
- m_pCurShowSmallImg = m_pCurShowImg->GetThumbnailImage(m_rcImgShow.Width(), m_rcImgShow.Height(), NULL, NULL);
- Graphics graphic(m_pCurShowSmallImg);//防止GetThumbnailImage影响质量
- graphic.DrawImage(m_pCurShowImg, 0, 0, m_pCurShowSmallImg->GetWidth(), m_pCurShowSmallImg->GetHeight());
- int orientation = GetOrientation(m_pCurShowImg);
- if (orientation == 8)
- {
- m_pCurShowImg->RotateFlip(Rotate270FlipNone);
- m_pCurShowSmallImg->RotateFlip(Rotate270FlipNone);
- }
- else if (orientation == 6)
- {
- m_pCurShowImg->RotateFlip(Rotate90FlipNone);
- m_pCurShowSmallImg->RotateFlip(Rotate90FlipNone);
- }
- // 存入到数组中;
- m_AryOfImgPtr.Add(m_pCurShowImg);
- m_AryOfSmallImgPtr.Add(m_pCurShowSmallImg);
- m_nPosArray.Add(m_nCurImgPos);
- if (m_AryOfImgPtr.GetSize() > 10)
- {// 如果加载的图片超过10张,删除第一张;
- if (m_pCurShowImg != m_AryOfImgPtr.ElementAt(0))
- {
- delete m_AryOfImgPtr.ElementAt(0);
- delete m_AryOfSmallImgPtr.ElementAt(0);
- m_AryOfImgPtr.RemoveAt(0);
- m_AryOfSmallImgPtr.RemoveAt(0);
- m_nPosArray.RemoveAt(0);
- }
- }
- m_bChooseBig = 0;
- Unlock(handle);
- }
- else if (m_pCurShowImg == NULL)
- {
- SetTimer(5, 1, NULL);
- return;
- }
- if (m_pImagetemp)
- delete m_pImagetemp;
- m_pImagetemp = NULL;
- InitRc();
- if (m_bauto)
- {// 自动播放相片;
- if (m_dlg.m_effect == 1 || m_dlg.m_effect == 2)
- {
- CDC *pDC = GetDC();
- HDC hdc = ::GetDC(NULL);
- ::BitBlt(pDC->GetSafeHdc(), 0, 0, g_screenwid, g_screenhei, hdc, 0, 0, SRCCOPY);
- ReleaseDC(pDC);
- }
- m_dlg.m_time = m_PicBar.m_time * 1000;
- m_dlg.SetImage(m_pCurShowSmallImg);
- if (m_dlg.m_effect == 1 || m_dlg.m_effect == 2)
- {
- m_dlg.ShowWindow(SW_HIDE);
- }
- // ShowAlpha里有SetTimer(1);
- m_dlg.ShowAlpha();
- }
- else
- {
- ShowInfo();
- Invalidate();
- }
- }
- catch (...)
- {
- }
- }
- void ShowPic22::OnLButtonDown(UINT nFlags, CPoint point)
- {
- SetCapture(); // 设置窗口捕获鼠标;
- m_startpt = m_startpt3 = point;
- CDialog::OnLButtonDown(nFlags, point);
- }
- void ShowPic22::OnMouseMove(UINT nFlags, CPoint point)
- {
- if (GetCapture() != this)
- return;
- if (m_rcImgShow.Width() > m_rcScreen.Width())
- {
- if (m_rcImgShow.left <m_rcScreen.left && point.x>m_startpt.x)
- {
- int dt = min(point.x - m_startpt.x, m_rcScreen.left - m_rcImgShow.left);
- m_rcImgShow.left += dt;
- m_rcImgShow.right += dt;
- }
- else if (m_rcImgShow.right > m_rcScreen.right && point.x < m_startpt.x)
- {
- int dt = min(m_startpt.x - point.x, m_rcImgShow.right - m_rcScreen.right);
- m_rcImgShow.left -= dt;
- m_rcImgShow.right -= dt;
- }m_startpt3 = point;
- }
- if (m_rcImgShow.Height() > m_rcScreen.Height())
- {
- if (m_rcImgShow.top <m_rcScreen.top && point.y>m_startpt.y)
- {
- int dt = min(point.y - m_startpt.y, m_rcScreen.top - m_rcImgShow.top);
- m_rcImgShow.top += dt;
- m_rcImgShow.bottom += dt;
- }
- else if (m_rcImgShow.bottom > m_rcScreen.bottom && point.y < m_startpt.y)
- {
- int dt = min(m_startpt.y - point.y, m_rcImgShow.bottom - m_rcScreen.bottom);
- m_rcImgShow.top -= dt;
- m_rcImgShow.bottom -= dt;
- }m_startpt3 = point;
- }
- m_startpt = point;
- Invalidate();
- CDialog::OnMouseMove(nFlags, point);
- }
- void ShowPic22::OnLButtonUp(UINT nFlags, CPoint point)
- {
- if (GetCapture() != this)return;
- ReleaseCapture();
- if (point.x - m_startpt3.x > 30)
- Next();
- else if (m_startpt3.x - point.x > 30)
- Pre();
- CDialog::OnLButtonUp(nFlags, point);
- }
- BOOL ShowPic22::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
- {
- if (m_pCurShowImg == NULL)
- return 1;
- if (m_bauto)
- return 1;
- if (m_bProcessing)
- return 1;
- m_bScroll = 1;
- if (zDelta > 0)
- {//放大图片;
- // if(m_fscale>4)return 1;
- m_fscale *= 1.2;
- int dtx = (m_fscale*m_rcImgShowBack.Width() - m_rcImgShow.Width()) / 2.0;
- int dty = (m_fscale*m_rcImgShowBack.Height() - m_rcImgShow.Height()) / 2.0;
- m_rcImgShow.left -= dtx;
- m_rcImgShow.right += dtx;
- m_rcImgShow.top -= dty;
- m_rcImgShow.bottom += dty;
- Invalidate();
- }
- else
- {// 缩小图片;
- if (m_fscale <= 1)
- return 1;
- m_fscale /= 1.2;
- if (m_fscale < 1)
- m_fscale = 1;
- int dtx = (m_fscale*m_rcImgShowBack.Width() - m_rcImgShow.Width()) / 2.0;
- int dty = (m_fscale*m_rcImgShowBack.Height() - m_rcImgShow.Height()) / 2.0;
- m_rcImgShow.left -= dtx;
- m_rcImgShow.right += dtx;
- m_rcImgShow.top -= dty;
- m_rcImgShow.bottom += dty;
- if (m_rcImgShowBack.Height() == m_rcScreen.Height())
- {
- if (m_rcImgShow.top < m_rcScreen.top && m_rcImgShow.bottom < m_rcScreen.bottom)
- {
- dtx = m_rcScreen.bottom - m_rcImgShow.bottom;
- m_rcImgShow.top += dtx;
- m_rcImgShow.bottom += dtx;
- }
- else if (m_rcImgShow.top >m_rcScreen.top && m_rcImgShow.bottom > m_rcScreen.bottom)
- {
- dtx = m_rcImgShow.top - m_rcScreen.top;
- m_rcImgShow.top -= dtx;
- m_rcImgShow.bottom -= dtx;
- }
- dtx = m_rcImgShow.Width();
- m_rcImgShow.left = (m_rcScreen.Width() - dtx) / 2;
- m_rcImgShow.right = m_rcImgShow.left + dtx;
- }
- if (m_rcImgShowBack.Width() == m_rcScreen.Width())
- {
- if (m_rcImgShow.left < m_rcScreen.left && m_rcImgShow.right < m_rcScreen.right)
- {
- dtx = m_rcScreen.right - m_rcImgShow.right;
- m_rcImgShow.left += dtx;
- m_rcImgShow.right += dtx;
- }
- else if (m_rcImgShow.left >m_rcScreen.left && m_rcImgShow.right > m_rcScreen.right)
- {
- dtx = m_rcImgShow.left - m_rcScreen.left;
- m_rcImgShow.left -= dtx;
- m_rcImgShow.right -= dtx;
- }
- dtx = m_rcImgShow.Height();
- m_rcImgShow.top = (m_rcScreen.Height() - dtx) / 2;
- m_rcImgShow.bottom = m_rcImgShow.top + dtx;
- }
- Invalidate();
- /* int dtx=(m_fscale-1)*m_rcImgShowBack.Width ()/2.0;
- int dty=(m_fscale-1)*m_rcImgShowBack.Height ()/2.0;
- m_rcImgShow=m_rcImgShowBack;
- m_rcImgShow.left -=dtx;
- m_rcImgShow.right +=dtx;
- m_rcImgShow.top -=dty;
- m_rcImgShow.bottom +=dty;
- Invalidate();*/
- }
- KillTimer(2);
- SetTimer(2, 100, NULL);
- return CDialog::OnMouseWheel(nFlags, zDelta, pt);
- }
- BOOL ShowPic22::PreTranslateMessage(MSG* pMsg) // 键盘和按钮响应事件;
- {
- if (pMsg->message == WM_MOUSEMOVE)
- {
- if (m_bShowEffect)return 1;
- if (m_PicBar.m_bInit && m_pCurShowImg)
- {
- CPoint point;
- ::GetCursorPos(&point);
- if (abs(m_startpt2.x - point.x) > 5 || abs(m_startpt2.y - point.y) > 5)
- {
- m_startpt2 = point;
- m_PicBar.ShowWindow(SW_SHOW);
- SetTimer(3, 1500, NULL);
- }
- }
- }
- else if (pMsg->message == WM_KEYDOWN)
- {
- if (m_bShowEffect)return 1;
- switch (pMsg->wParam)
- {
- case VK_RETURN:
- return 1;
- case VK_ESCAPE:
- KillTimer(6);
- SetTimer(6, 100, NULL);
- return 1;
- case VK_F2:
- return 1;
- if (m_pParent == NULL)return 1;
- if (m_pParent->m_Runingmode)return 1;
- if (m_bShowEffect)return 1;
- if (m_bauto)
- {
- m_bauto = 0;
- KillTimer(1);
- m_dlg.TerminateThread();
- m_dlg.ShowWindow(SW_HIDE);
- }
- if (m_pCurShowImg)
- {
- m_bShowEffect = 1;
- CutPhoto2();
- // ShowEffectDlg dlg;
- // dlg.DoModal();
- m_bShowEffect = 0;
- }
- return 1;
- case VK_F3:
- AutoPic();
- break;
- case VK_UP:
- Rotate1();
- return 1;
- case VK_PRIOR:
- case VK_LEFT:
- Pre();
- return 1;
- case VK_DOWN:
- Rotate2();
- return 1;
- case VK_RIGHT:
- case VK_NEXT:
- Next();
- return 1;
- case VK_SHIFT:
- {
- if (m_bauto)return 1; if (m_bProcessing)return 1;
- if (m_pAryOriginalImgPath && m_bChooseBig == 0)
- {
- HANDLE handle = Lock("shgenimagethread");
- for (int n = 0; n < m_nPosArray.GetSize(); n++)
- {
- if (m_nCurImgPos == m_nPosArray.ElementAt(n))
- {
- delete m_AryOfImgPtr.ElementAt(n);
- delete m_AryOfSmallImgPtr.ElementAt(n);
- m_AryOfImgPtr.RemoveAt(n);
- m_AryOfSmallImgPtr.RemoveAt(n);
- m_nPosArray.RemoveAt(n);
- break;
- }
- }
- Unlock(handle);
- m_bChooseBig = 1;
- LoadImage();
- }
- }
- return 1;
- case VK_DELETE:
- if (m_bauto)return 1;
- if (m_pParent)
- {
- if (m_bProcessing)return 1;
- m_bProcessing = 1;
- ::SetForegroundWindow(m_hWnd);
- if (m_pParent)
- {
- for (int i = 0; i < m_pParent->m_List1.GetItemCount(); i++)
- {
- m_pParent->m_List1.SetItemState(i, 0, -1);
- }
- m_pParent->m_List1.SetItemState(m_nCurImgPos, LVIS_SELECTED, LVIS_SELECTED);
- }
- // HANDLE handle=Lock("shgenimagethread");
- if (m_pParent->OnDel())
- {
- TerminateThread();
- ::SetForegroundWindow(m_hWnd);
- m_pCurShowImg = m_pCurShowSmallImg = NULL;
- for (int n = m_nPosArray.GetSize() - 1; n >= 0; n--)
- {
- //if(m_pos==m_nPosArray.ElementAt (n))
- {
- delete m_AryOfImgPtr.ElementAt(n);
- delete m_AryOfSmallImgPtr.ElementAt(n);
- m_AryOfImgPtr.RemoveAt(n);
- m_AryOfSmallImgPtr.RemoveAt(n);
- m_nPosArray.RemoveAt(n);
- }
- }
- if (m_pAryOriginalImgPath)
- {
- m_pAryOriginalImgPath->RemoveAll();
- m_pAryImgPath->RemoveAll();
- CStringArray *pArray = m_pParent->GetCurArray(m_pParent->m_SelectCategory);
- m_pAryOriginalImgPath->Copy(*pArray);
- for (int i = 0; i < m_pAryOriginalImgPath->GetSize(); i++)
- {
- CString str = m_pAryOriginalImgPath->ElementAt(i);
- CString spath = str.Left(str.ReverseFind('\\') + 1);
- spath += "m";
- spath += str.Right(str.GetLength() - str.ReverseFind('\\') - 1);
- if (::PathFileExists(spath))
- m_pAryImgPath->Add(spath);
- else
- m_pAryImgPath->Add(str);
- }
- }
- if (m_nCurImgPos >= this->m_pAryImgPath->GetSize())
- m_nCurImgPos = 0;
- // Unlock(handle);
- RunPicThread();
- LoadImage();
- m_pParent->m_List1.SetItemState(m_nCurImgPos, LVIS_SELECTED, LVIS_SELECTED);
- }
- m_bProcessing = 0;
- return 1;
- }
- }
- ::SetForegroundWindow(m_hWnd);
- }
- return CDialog::PreTranslateMessage(pMsg);
- }
- //---------------------------------------------------------------
- // Remark by Jeff 2014.11.05
- // 函数:OnRButtonDown
- // 描述:鼠标右键
- // 参数:
- // nFlags:表示各种虚拟按键是否下降
- // point: 指定x和光标的y坐标
- // 返回:无
- //---------------------------------------------------------------
- void ShowPic22::OnRButtonDown(UINT nFlags, CPoint point) // 鼠标右键;
- {
- if (m_bauto)return;
- if (m_bProcessing)return;
- if (m_pParent)
- {
- for (int i = 0; i < m_pParent->m_List1.GetItemCount(); i++)
- {
- m_pParent->m_List1.SetItemState(i, 0, -1);
- }
- m_pParent->m_List1.SetItemState(m_nCurImgPos, LVIS_SELECTED, LVIS_SELECTED);
- m_pParent->OnRclickList1();
- }
- CDialog::OnRButtonDown(nFlags, point);
- }
- //---------------------------------------------------------------
- // Remark by Jeff 2014.11.05
- // 函数:AutoPic
- // 描述:播放幻灯片按钮
- // 参数:无
- // 返回:无
- //---------------------------------------------------------------
- void ShowPic22::AutoPic() // 自动播放幻灯片按钮;
- {
- try
- {
- if (m_bProcessing)
- return;
- m_dlg.m_effect = m_PicBar.m_nType;
- m_bauto = !m_bauto;
- m_PicBar.ChangeBtn();
- if (m_bauto)
- {
- m_PreviewDlg.ShowMin();
- if (m_nCurImgPos >= this->m_pAryImgPath->GetSize())
- m_nCurImgPos = 0;
- LoadImage();
- }
- else
- {
- KillTimer(1);
- m_dlg.TerminateThread();
- m_dlg.ShowWindow(SW_HIDE);
- }
- ::SetForegroundWindow(m_hWnd);
- }
- catch (...)
- {
- }
- }
- void ShowPic22::OnTimer(UINT nIDEvent)
- {
- try
- {
- if (m_bShowEffect)
- return;
- ::SetForegroundWindow(m_hWnd);
- if (nIDEvent == 1)
- {// 自动播放相片;
- KillTimer(1);
- m_nCurImgPos++;
- if (m_nCurImgPos >= this->m_pAryImgPath->GetSize())
- {
- KillTimer(1);
- m_dlg.TerminateThread();
- m_dlg.ShowWindow(SW_HIDE);
- m_PicBar.ChangeBtn();
- AfxMessageBox(_T("您的照片已浏览完毕!"), MB_ICONINFORMATION);
- m_bauto = FALSE;
- m_bProcessing = FALSE;
- m_nCurImgPos -= 2;
- Next();
- return;
- }
- LoadImage();
- }
- else if (nIDEvent == 2)
- {// 鼠标滚动轴事件引起,放大或缩小图片;
- KillTimer(2);
- if (m_pImagetemp)
- {
- if (m_rcImgShow.Width() > m_pImagetemp->GetWidth())
- {
- DELETEP(m_pImagetemp)
- m_pImagetemp = m_pCurShowImg->GetThumbnailImage(min(m_pCurShowImg->GetWidth(), m_rcImgShow.Width()), min(m_pCurShowImg->GetHeight(), m_rcImgShow.Height()), NULL, NULL);
- Graphics graphic(m_pImagetemp);//防止GetThumbnailImage影响质量
- graphic.DrawImage(m_pCurShowImg, 0, 0, m_pImagetemp->GetWidth(), m_pImagetemp->GetHeight());
- }
- }
- else
- {
- m_pImagetemp = m_pCurShowImg->GetThumbnailImage(min(m_pCurShowImg->GetWidth(), m_rcImgShow.Width()), min(m_pCurShowImg->GetHeight(), m_rcImgShow.Height()), NULL, NULL);
- Graphics graphic(m_pImagetemp);//防止GetThumbnailImage影响质量
- graphic.DrawImage(m_pCurShowImg, 0, 0, m_pImagetemp->GetWidth(), m_pImagetemp->GetHeight());
- }
- Invalidate();
- }
- else if (nIDEvent == 3)
- {// 显示或隐藏底部的工具条;
- KillTimer(3);
- CPoint pt;
- ::GetCursorPos(&pt);
- if (m_picbarrc.PtInRect(pt))
- {
- SetTimer(3, 1500, NULL);
- }
- else
- m_PicBar.ShowWindow(SW_HIDE);
- ::SetForegroundWindow(m_hWnd);
- }
- else if (nIDEvent == 4)
- {// 创建底部工具条;
- KillTimer(4);
- m_PicBar.SetLiaPath("4.lia");
- m_PicBar.Create(IDD_DLGmydlg, this);
- if (m_PicBar.m_bInit)
- {
- m_PicBar.m_pParent = this;
- int hei;
- m_PicBar.GetWindowRect(m_picbarrc);
- hei = m_picbarrc.Height();
- m_picbarrc.bottom = g_screenhei - 10;
- m_picbarrc.top = m_picbarrc.bottom - hei;
- m_PicBar.MoveWindow(m_picbarrc);
- SetTimer(3, 1500, NULL);
- m_startpt2.x = m_startpt2.y = 0;
- }
- ::SetForegroundWindow(m_hWnd);
- }
- else if (nIDEvent == 5)
- {
- KillTimer(5);
- LoadImage();
- }
- else if (nIDEvent == 6)
- {
- if (m_bProcessing)return;
- m_bProcessing = 1;
- g_nSendCode = 0;
- TerminateThread();
- m_dlg.TerminateThread();
- CDialog::OnOK();
- m_bProcessing = 0;
- }
- }
- catch (...)
- {
- }
- }
- void ShowPic22::OnClose()
- {
- if (m_pParent)
- {
- if (m_bProcessing)return;
- m_bProcessing = 1;
- {
- TerminateThread();
- ::SetForegroundWindow(m_hWnd);
- m_pCurShowImg = m_pCurShowSmallImg = NULL;
- for (int n = m_nPosArray.GetSize() - 1; n >= 0; n--)
- {
- delete m_AryOfImgPtr.ElementAt(n);
- delete m_AryOfSmallImgPtr.ElementAt(n);
- m_AryOfImgPtr.RemoveAt(n);
- m_AryOfSmallImgPtr.RemoveAt(n);
- m_nPosArray.RemoveAt(n);
- }
- if (m_pAryOriginalImgPath)
- {
- m_pAryOriginalImgPath->RemoveAll();
- m_pAryImgPath->RemoveAll();
- CStringArray *pArray = m_pParent->GetCurArray(m_pParent->m_SelectCategory);
- m_pAryOriginalImgPath->Copy(*pArray);
- for (int i = 0; i < m_pAryOriginalImgPath->GetSize(); i++)
- {
- CString str = m_pAryOriginalImgPath->ElementAt(i);
- CString spath = str.Left(str.ReverseFind('\\') + 1);
- spath += "m";
- spath += str.Right(str.GetLength() - str.ReverseFind('\\') - 1);
- if (::PathFileExists(spath))
- m_pAryImgPath->Add(spath);
- else
- m_pAryImgPath->Add(str);
- }
- }
- if (m_nCurImgPos >= this->m_pAryImgPath->GetSize())
- m_nCurImgPos = 0;
- if (this->m_pAryImgPath->GetSize() == 0)
- {
- m_bProcessing = 0;
- KillTimer(6);
- SetTimer(6, 100, NULL);
- }
- else
- {
- RunPicThread();
- LoadImage();
- }
- }
- m_bProcessing = 0;
- }
- }
- void ShowPic22::InitRc()
- {
- try
- {
- if (m_pCurShowImg == NULL)
- return;
- CRect rc;
- GetClientRect(rc);
- m_rcImgShow = rc;
- int width, height;
- if (m_pCurShowSmallImg)
- {
- width = m_pCurShowSmallImg->GetWidth();
- height = m_pCurShowSmallImg->GetHeight();
- }
- else
- {
- width = m_pCurShowImg->GetWidth();
- height = m_pCurShowImg->GetHeight();
- }
- //////////
- float fImgScale = (float)width / (float)height;
- float fWndScale = ((float)m_rcImgShow.Width()) / ((float)m_rcImgShow.Height());
- int rcwid = m_rcImgShow.Width();
- int rchei = m_rcImgShow.Height();
- int dt = 0;
- if (fWndScale < fImgScale)
- {
- dt = (rchei - rcwid / fImgScale) / 2;
- m_rcImgShow.top += dt;
- m_rcImgShow.bottom -= dt;
- }
- else
- {
- dt = (rcwid - rchei*fImgScale) / 2;
- m_rcImgShow.left += dt;
- m_rcImgShow.right -= dt;
- }
- m_rcImgShowBack = m_rcImgShow;
- }
- catch (...)
- {
- }
- }
- //---------------------------------------------------------------
- // Remark by Jeff 2014.11.05
- // 函数:Rotate1
- // 描述:旋转相片270度;
- // 参数:无
- // 返回:无
- //---------------------------------------------------------------
- void ShowPic22::Rotate1() // 逆时针旋转相片按钮;
- {
- if (m_bauto)return;
- if (m_bProcessing)return;
- try
- {
- if (m_pCurShowImg)
- {
- m_pCurShowImg->RotateFlip(Rotate270FlipNone);
- if (m_pCurShowSmallImg)
- m_pCurShowSmallImg->RotateFlip(Rotate270FlipNone);
- if (m_pImagetemp)
- m_pImagetemp->RotateFlip(Rotate270FlipNone);
- InitRc();
- Invalidate();
- }
- }
- catch (...)
- {
- }
- }
- //---------------------------------------------------------------
- // Remark by Jeff 2014.11.05
- // 函数:Rotate2
- // 描述:旋转相片90度;
- // 参数:无
- // 返回:无
- //---------------------------------------------------------------
- void ShowPic22::Rotate2() // 顺时针旋转相片按钮;
- {
- if (m_bauto)return;
- if (m_bProcessing)return;
- try
- {
- if (m_pCurShowImg)
- {
- m_pCurShowImg->RotateFlip(Rotate90FlipNone);
- if (m_pCurShowSmallImg)
- m_pCurShowSmallImg->RotateFlip(Rotate90FlipNone);
- if (m_pImagetemp)
- m_pImagetemp->RotateFlip(Rotate90FlipNone);
- InitRc();
- Invalidate();
- }
- }
- catch (...)
- {
- }
- }
- //---------------------------------------------------------------
- // Remark by Jeff 2014.11.05
- // 函数:Pre
- // 描述:上一张按钮
- // 参数:无
- // 返回:无
- //---------------------------------------------------------------
- void ShowPic22::Pre() // 上一张按钮;
- {
- if (m_bauto)return;
- if (m_bProcessing)return;
- m_bInit = 1;
- try
- {
- m_nCurImgPos--;
- if (m_nCurImgPos < 0)
- m_nCurImgPos = this->m_pAryImgPath->GetSize() - 1;
- m_bChooseBig = 0;
- LoadImage();
- m_PreviewDlg.ShowPic(m_nCurImgPos);
- }
- catch (...)
- {
- }
- }
- //---------------------------------------------------------------
- // Remark by Jeff 2014.11.05
- // 函数:Next
- // 描述:下一张按钮
- // 参数:无
- // 返回:无
- //---------------------------------------------------------------
- void ShowPic22::Next() // 下一张按钮;
- {
- if (m_bauto)return;
- if (m_bProcessing)return;
- m_bInit = 1;
- try
- {
- m_nCurImgPos++;
- if (m_nCurImgPos >= this->m_pAryImgPath->GetSize())
- {
- m_nCurImgPos = 0;
- AfxMessageBox("您的照片已浏览完毕!", MB_ICONINFORMATION);
- }
- m_bChooseBig = 0;
- LoadImage();
- m_PreviewDlg.ShowPic(m_nCurImgPos);
- }
- catch (...)
- {
- }
- }
- //------------------------------------------------------
- // Remark by Jeff 2014.11.05
- // 函数:SetEffect
- // 描述:设置显示相片效果;
- // 参数:effect:效果类型;
- // 返回:无
- //------------------------------------------------------
- void ShowPic22::SetEffect(int effect)
- {
- ::SetForegroundWindow(m_hWnd);
- m_dlg.m_effect = effect;
- }
- void ShowPic22::TerminateThread()
- {
- try
- {
- if (m_bRunning)
- {
- m_bTerminate = true;
- for (;;)
- {
- if (::WaitForSingleObject(m_hThread, 0) == WAIT_OBJECT_0)
- break;
- MSG msg;
- while (::PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
- {
- if (!AfxGetApp()->PumpMessage())
- break;
- }
- }
- ::CloseHandle(m_hThread);
- }
- }
- catch (...)
- {
- }
- }
- void ShowPic22::InitRc(Image *img, CRect &rc) // 使图片大小自适应窗口区域;
- {
- try
- {
- if (img == NULL)
- return;
- GetClientRect(rc);
- INT nImgWidth = img->GetWidth();
- INT nImgHeight = img->GetHeight();
- // 图片宽高比例;
- float fImgscale = (float)nImgWidth / (float)nImgHeight;
- // 窗口宽高比例;
- float fWndscale = ((float)rc.Width()) / ((float)rc.Height());
- // 窗口宽;
- int nWndWidth = rc.Width();
- // 窗口高;
- int nWndHeight = rc.Height();
- int dt = 0;
- if (fWndscale < fImgscale)
- {// 图片 比 窗口宽,减少窗口高度;
- dt = (nWndHeight - nWndWidth / fImgscale) / 2;
- rc.top += dt;
- rc.bottom -= dt;
- }
- else
- {// 窗口 比 图片宽,减少窗口宽度;
- dt = (nWndWidth - nWndHeight*fImgscale) / 2;
- rc.left += dt;
- rc.right -= dt;
- }
- }
- catch (...)
- {
- }
- }
- HBRUSH ShowPic22::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
- {
- HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
- if (nCtlColor == CTLCOLOR_STATIC)
- {
- pDC->SetBkMode(TRANSPARENT);
- pDC->SetTextColor(RGB(255, 255, 255));
- return (HBRUSH)::GetStockObject(NULL_BRUSH);
- }
- return hbr;
- }
- void ShowPic22::RunPicThread()
- {
- // 1.是否有播放相片路径;
- if (m_pAryImgPath->GetSize() == 0)
- return;//2011-03-09
- TerminateThread();
- m_hThread = (HANDLE)_beginthreadex(NULL, 0, GenThumbImgThread, (LPVOID)this, 0/* CREATE_SUSPENDED*/, &m_dwThreadID);
- m_bRunning = true;
- }
- //-------------------------------------------------------------------
- // Remark by Jeff
- // 函数:OnMouseWheel2
- // 描述:鼠标滚轮缩放图片
- // 参数:bZoomOut : TRUE 表示放大;FALSE表示缩小;
- // 返回:无
- //-------------------------------------------------------------------
- void ShowPic22::OnMouseWheel2(BOOL bZoomOut) // 鼠标滚轮缩放图片;
- {
- if (m_pCurShowImg == NULL)return;
- if (m_bauto)return;
- if (m_bProcessing)return;
- m_bScroll = 1;
- if (bZoomOut)
- {
- // if(m_fscale>4)return 1;
- m_fscale *= 1.2;
- int dtx = (m_fscale*m_rcImgShowBack.Width() - m_rcImgShow.Width()) / 2.0;
- int dty = (m_fscale*m_rcImgShowBack.Height() - m_rcImgShow.Height()) / 2.0;
- m_rcImgShow.left -= dtx;
- m_rcImgShow.right += dtx;
- m_rcImgShow.top -= dty;
- m_rcImgShow.bottom += dty;
- Invalidate();
- }
- else
- {
- if (m_fscale <= 1)return;
- m_fscale /= 1.2;
- if (m_fscale < 1)m_fscale = 1;
- int dtx = (m_fscale*m_rcImgShowBack.Width() - m_rcImgShow.Width()) / 2.0;
- int dty = (m_fscale*m_rcImgShowBack.Height() - m_rcImgShow.Height()) / 2.0;
- m_rcImgShow.left -= dtx;
- m_rcImgShow.right += dtx;
- m_rcImgShow.top -= dty;
- m_rcImgShow.bottom += dty;
- if (m_rcImgShowBack.Height() == m_rcScreen.Height())
- {
- if (m_rcImgShow.top < m_rcScreen.top && m_rcImgShow.bottom < m_rcScreen.bottom)
- {
- dtx = m_rcScreen.bottom - m_rcImgShow.bottom;
- m_rcImgShow.top += dtx;
- m_rcImgShow.bottom += dtx;
- }
- else if (m_rcImgShow.top >m_rcScreen.top && m_rcImgShow.bottom > m_rcScreen.bottom)
- {
- dtx = m_rcImgShow.top - m_rcScreen.top;
- m_rcImgShow.top -= dtx;
- m_rcImgShow.bottom -= dtx;
- }
- dtx = m_rcImgShow.Width();
- m_rcImgShow.left = (m_rcScreen.Width() - dtx) / 2;
- m_rcImgShow.right = m_rcImgShow.left + dtx;
- }
- if (m_rcImgShowBack.Width() == m_rcScreen.Width())
- {
- if (m_rcImgShow.left < m_rcScreen.left && m_rcImgShow.right < m_rcScreen.right)
- {
- dtx = m_rcScreen.right - m_rcImgShow.right;
- m_rcImgShow.left += dtx;
- m_rcImgShow.right += dtx;
- }
- else if (m_rcImgShow.left >m_rcScreen.left && m_rcImgShow.right > m_rcScreen.right)
- {
- dtx = m_rcImgShow.left - m_rcScreen.left;
- m_rcImgShow.left -= dtx;
- m_rcImgShow.right -= dtx;
- }
- dtx = m_rcImgShow.Height();
- m_rcImgShow.top = (m_rcScreen.Height() - dtx) / 2;
- m_rcImgShow.bottom = m_rcImgShow.top + dtx;
- }
- Invalidate();
- }
- KillTimer(2);
- SetTimer(2, 100, NULL);
- }
- long ShowPic22::ShowInfo2(WPARAM inWParam, LPARAM inLParam)
- {
- if (inWParam == 1)
- {
- if (m_bauto)AutoPic();
- return 1;
- }
- ShowInfo();
- return 1;
- }
- void ShowPic22::ShowInfo()
- {
- Invalidate();
- if (m_bShowImgInfo)
- {
- CString str = m_pAryImgPath->ElementAt(m_nCurImgPos);
- str = str.Right(str.GetLength() - str.ReverseFind(_T('\\')) - 1);
- str = str.Left(str.GetLength() - 4);
- str.TrimLeft(_T("m"));
- str = _T("编号:") + str + _T(" ");
- if (m_pParent)
- str += m_pParent->GetZSInfo(m_nCurImgPos);
- SetDlgItemText(IDC_STATIC2, str);
- }
- }
- //----------------------------------------------------------------
- // Remark by Jeff 2014.11.05
- // 函数:CutPhoto2
- // 描述:剪裁按钮对应的剪裁功能;
- // 参数:无
- // 返回:无
- // ----------------------------------------------------------------
- void ShowPic22::CutPhoto2()
- {
- if (m_pParent == NULL)return;
- CutPhoto dlg;
- CString path = m_pAryImgPath->ElementAt(m_nCurImgPos);
- if (m_pAryOriginalImgPath)
- path = m_pAryOriginalImgPath->ElementAt(m_nCurImgPos);
- path = path.Right(path.GetLength() - path.ReverseFind('\\') - 1);
- path = path.Left(path.Find("."));
- // path其实不是路径,只是文件名;如005
- dlg.m_strImgName = path;
- dlg.m_photowidth = m_pCurShowImg->GetWidth();
- dlg.m_photoheight = m_pCurShowImg->GetHeight();
- dlg.m_pImg = m_pCurShowSmallImg;
- dlg.m_strOrderNumber = m_pParent->m_strOrderNumber;
- dlg.DoModal();
- }
- //----------------------------------------------------------------
- // Remark by Jeff 2014.11.05
- // 函数:CutPhoto3
- // 描述:剪裁按钮;
- // 参数:无
- // 返回:无
- // ----------------------------------------------------------------
- void ShowPic22::CutPhoto3()
- {
- if (m_pParent == NULL)return;
- if (m_pParent->m_Runingmode)return;
- if (m_bShowEffect)return;
- if (m_bauto)
- {
- m_bauto = 0;
- KillTimer(1);
- m_dlg.TerminateThread();
- m_dlg.ShowWindow(SW_HIDE);
- }
- if (m_pCurShowImg)
- {
- m_bShowEffect = 1;
- CutPhoto2();
- m_bShowEffect = 0;
- }
- }
|