00001
00002
00003
00004
00005 #include "stdafx.h"
00006 #include "resource.h"
00007 #include <Camera/InterfaceDll.h>
00008 #include <Camera/CameraGeneralDefines.h>
00009 #include "ScanBaseBuffer.h"
00010 #include "ScanFilter.h"
00011 #include "ScanFilterClip.h"
00012
00013 #include "FilterDlg.h"
00014
00015
00016 #ifdef _DEBUG
00017 #undef THIS_FILE
00018 static char THIS_FILE[]=__FILE__;
00019 #define new DEBUG_NEW
00020 #endif
00021
00022
00023
00024
00025
00026 CScanFilterClip::CScanFilterClip() :
00027 m_rcClipArea( NonIntersectingRect )
00028 {
00029
00030 m_csFilterName = m_lpcsFilterName;
00031
00032 }
00033
00034 CScanFilterClip::~CScanFilterClip()
00035 {
00036
00037 }
00038
00039 LPCTSTR CScanFilterClip::m_lpcsFilterName = _T("Clip");
00040
00041 LPCTSTR CScanFilterClip::m_lpcsShortFilterName = CScanFilterClip::m_lpcsFilterName;
00042 IMPLEMENT_SERIAL(CScanFilterClip, CScanFilter, 0)
00043
00044
00045
00046 void CScanFilterClip::Serialize(CArchive& ar)
00047 {
00048
00049 CScanFilter::Serialize( ar );
00050 };
00051
00052
00053
00054
00055
00056 BOOL CScanFilterClip::SetParameters( LPCTSTR lpParameters )
00057 {
00058
00059
00060 if ( Q_INVALID( NULL == lpParameters && "CScanFilterClip (SetParameters): parameters expected, none provided (NULL)." ) )
00061 {
00062 return FALSE;
00063 }
00064
00065
00066
00067
00068 int nfields = _stscanf( lpParameters, _T( "%d,%d,%d,%d" ),
00069 &m_rcClipArea.left, &m_rcClipArea.top, &m_rcClipArea.right, &m_rcClipArea.bottom );
00070
00071 if ( Q_INVALID( 4 > nfields && "CScanFilterClip (SetParameters): left, top, right, bottom expected, got fewer." ) )
00072 {
00073 return FALSE;
00074 }
00075
00076 if ( Q_INVALID( m_rcClipArea.IsRectEmpty() && "CScanFilterClip (SetParameters): empty clip rectange." ) )
00077 {
00078 return FALSE;
00079 }
00080
00081 return TRUE;
00082 }
00083
00084
00085
00086 LPCTSTR CScanFilterClip::GetParameters() const
00087 {
00088
00089 CString csTmp;
00090 csTmp.Format(_T("%d,%d,%d,%d"),m_rcClipArea.left,m_rcClipArea.top,m_rcClipArea.right,m_rcClipArea.bottom);
00091
00092
00093 LPTSTR pReturn = new TCHAR[ csTmp.GetLength() + 1];
00094 strcpy(pReturn, csTmp);
00095 return pReturn;
00096 }
00097
00098
00099
00100 BOOL CScanFilterClip::Apply()
00101 {
00102
00103
00104 ASSERT(m_lpsbIn);
00105 ASSERT(m_lpsbOut);
00106
00107 CRect rcTestClip;
00108 m_rcClipArea.NormalizeRect();
00109 rcTestClip.IntersectRect(CRect(0,0,m_lpsbIn->m_dwSizeX,m_lpsbIn->m_dwSizeY),m_rcClipArea);
00110
00111
00112
00113
00114 Q_RETURN( m_lpsbOut->CreateOutputBufferFor( *m_lpsbIn ) );
00115 Q_RETURN( m_lpsbOut->ResizeDataBuffer( CSize( rcTestClip.Width(), rcTestClip.Height() ) ) );
00116
00117 m_lpsbOut->m_csBufferName.Format(_T("%s - %s"),m_lpsbIn->m_csBufferName, m_lpcsShortFilterName );
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130 for (int y=0; y<(int)m_lpsbOut->m_dwSizeY; y++)
00131 memcpy( m_lpsbOut->m_pwData + (int)m_lpsbOut->m_dwSizeX * y, m_lpsbIn->m_pwData + (int)m_lpsbIn->m_dwSizeX * (y + rcTestClip.top) + rcTestClip.left, (int)m_lpsbOut->m_dwSizeX * sizeof(short));
00132
00133 if ((m_lpsbIn->m_dwFlags & SPM_SDBF_LEFT2RIGHT) && (m_lpsbIn->m_dwFlags & SPM_SDBF_RIGHT2LEFT))
00134 {
00135 DWORD dwOffsetIn = m_lpsbIn->m_dwSizeX*m_lpsbIn->m_dwSizeY;
00136 DWORD dwOffsetOut = m_lpsbOut->m_dwSizeX*m_lpsbOut->m_dwSizeY;
00137 for (int y=0; y<(int)m_lpsbOut->m_dwSizeY; y++)
00138 memcpy( m_lpsbOut->m_pwData + (int)m_lpsbOut->m_dwSizeX * y + (int)dwOffsetOut, m_lpsbIn->m_pwData + (int)m_lpsbIn->m_dwSizeX * (y + rcTestClip.top) + rcTestClip.left + (int)dwOffsetIn, (int)m_lpsbOut->m_dwSizeX * sizeof(short));
00139 }
00140
00141 m_lpsbOut->m_dwParameterMask = 0;
00142 return TRUE;
00143 }
00144
00145
00146
00147 #pragma warning( push )
00148 #pragma warning( disable : 4100 ) // unreferenced formal parameter
00149
00150 void CScanFilterClip::SetDragInput( BOOL bL2R, CRect rcIn )
00151 {
00152
00153
00154 m_rcClipArea = rcIn;
00155
00156
00157
00158 }
00159
00160 #pragma warning( pop )
00161
00162
00163
00164 #pragma warning( push )
00165 #pragma warning( disable : 4100 ) // unreferenced formal parameters
00166
00167 BOOL CScanFilterClip::RunModeless( CWnd* pParentWnd, CDocument* pDoc )
00168 {
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178 return FALSE;
00179 }
00180
00181 #pragma warning( pop )
00182
00183
00184