IMAGEVIEWDOC.CPP
上传用户:alisonmail
上传日期:2013-02-28
资源大小:500k
文件大小:4k
源码类别:

图片显示

开发平台:

Visual C++

  1. // ImageViewDoc.cpp : implementation of the CImageViewDoc class
  2. //
  3. #include "stdafx.h"
  4. #include "ImageView.h"
  5. #include "ImageViewDoc.h"
  6. #include "ImageViewView.h"
  7. #include "MainFrm.h"
  8. #include "ChildFrm.h"
  9. #include "Brightness.h"
  10. #ifdef _DEBUG
  11. #define new DEBUG_NEW
  12. #undef THIS_FILE
  13. static char THIS_FILE[] = __FILE__;
  14. #endif
  15. /////////////////////////////////////////////////////////////////////////////
  16. // CImageViewDoc
  17. IMPLEMENT_DYNCREATE(CImageViewDoc, CDocument)
  18. BEGIN_MESSAGE_MAP(CImageViewDoc, CDocument)
  19. //{{AFX_MSG_MAP(CImageViewDoc)
  20. ON_COMMAND(ID_FILE_SAVE_AS, OnFileSaveAs)
  21. //}}AFX_MSG_MAP
  22. END_MESSAGE_MAP()
  23. /////////////////////////////////////////////////////////////////////////////
  24. // CImageViewDoc construction/destruction
  25. CImageViewDoc::CImageViewDoc()
  26. {
  27. // TODO: add one-time construction code here
  28. }
  29. CImageViewDoc::~CImageViewDoc()
  30. {
  31. }
  32. BOOL CImageViewDoc::OnNewDocument()
  33. {
  34. if (!CDocument::OnNewDocument())
  35. return FALSE;
  36. // TODO: add reinitialization code here
  37. // (SDI documents will reuse this document)
  38. return TRUE;
  39. }
  40. /////////////////////////////////////////////////////////////////////////////
  41. // CImageViewDoc serialization
  42. void CImageViewDoc::Serialize(CArchive& ar)
  43. {
  44. if (ar.IsStoring())
  45. {
  46. // TODO: add storing code here
  47. }
  48. else
  49. {
  50. // TODO: add loading code here
  51. }
  52. }
  53. /////////////////////////////////////////////////////////////////////////////
  54. // CImageViewDoc diagnostics
  55. #ifdef _DEBUG
  56. void CImageViewDoc::AssertValid() const
  57. {
  58. CDocument::AssertValid();
  59. }
  60. void CImageViewDoc::Dump(CDumpContext& dc) const
  61. {
  62. CDocument::Dump(dc);
  63. }
  64. #endif //_DEBUG
  65. /////////////////////////////////////////////////////////////////////////////
  66. // CImageViewDoc commands
  67. void CImageViewDoc::OnFileSaveAs() 
  68. {
  69. static int nIndex = 1;
  70. char szFilter[] = "BMP Files(*.BMP)|*.BMP|GIF Files(*.GIF)|*.GIF|PCX Files(*.PCX)|*.PCX|Targa Files(*.TGA)|*.TGA|Jpeg Files(*.JPG)|*.JPG|Tif Files(*.TIF)|*.TIF||";
  71. CFileDialog FileDlg( FALSE, NULL, NULL, OFN_HIDEREADONLY, szFilter );
  72. FileDlg.m_ofn.nFilterIndex = (DWORD) nIndex;
  73. if( FileDlg.DoModal() == IDOK ){
  74. nIndex = (int) FileDlg.m_ofn.nFilterIndex;
  75. CMainFrame *pFrame = (CMainFrame *) AfxGetMainWnd();
  76. CChildFrame *pChild = (CChildFrame *) pFrame->MDIGetActive();
  77. CImageViewView *pView = (CImageViewView *) pChild->GetActiveView();
  78. if( nIndex == 5 ){
  79. if( pView->m_pImageObject->GetNumBits() != 24 ){
  80. AfxMessageBox( "The image must be 24 bits of color resolution to save as JPEG" );
  81. return;
  82. }
  83. CBrightness Brightness;
  84. strcpy( Brightness.m_szTitle, "Set Quality" );
  85. strcpy( Brightness.m_szLabel, "Quality" );
  86. if( Brightness.DoModal() != IDOK ) return;
  87. if( pView->m_pImageObject != NULL )
  88. pView->m_pImageObject->SetQuality( Brightness.m_nBrightness / 2 );
  89. }
  90. if( pView->m_pImageObject != NULL ){
  91. CString PathName = FileDlg.GetPathName();
  92. int nFindIndex = PathName.Find( "." );
  93. if( nFindIndex != -1 ) PathName = PathName.Left( nFindIndex );
  94. PathName += CImageObject::szExtensions[nIndex-1];
  95. pView->m_pImageObject->Save( PathName );
  96. CString FileName = FileDlg.GetFileName();
  97. nFindIndex = FileName.Find( "." );
  98. if( nFindIndex != -1 ) FileName = FileName.Left( nFindIndex );
  99. FileName += CImageObject::szExtensions[nIndex-1];
  100. FileName.MakeUpper();
  101. pChild->SetWindowText( FileName );
  102. SetPathName( PathName );
  103. if( nIndex == 5 ){
  104. pView->m_pImageObject->Load( PathName );
  105. pView->InvalidateRect( NULL, FALSE );
  106. pView->UpdateWindow();
  107. }
  108. }
  109. }
  110. }