mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-04-07 13:55:33 +08:00
git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@52882 954022d7-b5bf-4e40-9824-e11837661b57
8349 lines
295 KiB
C++
8349 lines
295 KiB
C++
#pragma once
|
||
|
||
#include <TransformConstants.h>
|
||
#include <ImageTransformsCore.h>
|
||
#include <ImageAnimations.h>
|
||
|
||
#include <ImageCore.h>
|
||
#include <MetaDataSaver.h>
|
||
#include <directx9\dx_effects.h>
|
||
|
||
|
||
|
||
namespace ImageStudio
|
||
{
|
||
namespace Transforms
|
||
{
|
||
double GetMetric( int nMetric, int nSize )
|
||
{
|
||
switch( nMetric )
|
||
{
|
||
case ImageStudio::Serialize::c_nMetricPercents: return nSize * 0.01;
|
||
case ImageStudio::Serialize::c_nMetricNormalizedCoordinates: return nSize;
|
||
case ImageStudio::Serialize::c_nMetricAlternativeNormalizedCoordinates: return nSize;
|
||
default: return 1;
|
||
}
|
||
}
|
||
|
||
BOOL GetMetricMultiplier( IMediaFrame* pFrame, int nMetric, double& dMetricX, double& dMetricY )
|
||
{
|
||
if( !pFrame )
|
||
return FALSE;
|
||
|
||
long lWidth = 0; pFrame->get_Width( &lWidth );
|
||
long lHeight = 0; pFrame->get_Height( &lHeight );
|
||
|
||
dMetricX = GetMetric( nMetric, lWidth );
|
||
dMetricY = GetMetric( nMetric, lHeight );
|
||
|
||
return TRUE;
|
||
}
|
||
BOOL GetMetricMultiplier( IUnknown* pInterface, int nMetric, double& dMetricX, double& dMetricY )
|
||
{
|
||
if( !pInterface )
|
||
return FALSE;
|
||
|
||
IMediaFrame* pFrame = NULL;
|
||
pInterface->QueryInterface( MediaCore::IID_IAVSUncompressedVideoFrame, (void**)&pFrame );
|
||
if( !pFrame )
|
||
return FALSE;
|
||
|
||
BOOL bRetCode = GetMetricMultiplier( pFrame, nMetric, dMetricX, dMetricY );
|
||
|
||
pFrame->Release();
|
||
|
||
return TRUE;
|
||
}
|
||
BOOL GetMetricMultiplier( Gdiplus::Image* pImage, int nMetric, double& dMetricX, double& dMetricY )
|
||
{
|
||
if( !pImage )
|
||
return FALSE;
|
||
|
||
int nWidth = pImage->GetWidth();
|
||
int nHeight = pImage->GetHeight();
|
||
|
||
dMetricX = GetMetric( nMetric, nWidth );
|
||
dMetricY = GetMetric( nMetric, nHeight );
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
IMediaFrame* ResizeAspectFrame( IMediaFrame* pSrcFrame )
|
||
{
|
||
if( !pSrcFrame )
|
||
return NULL;
|
||
|
||
BYTE* pBGRA = NULL;
|
||
int nWidth = 0;
|
||
int nHeight = 0;
|
||
int nStride = 0;
|
||
long lAspectX = 0;
|
||
long lAspectY = 0;
|
||
|
||
if( Core::c_nErrorNone != Core::COM::COM_GetBGRAImageFromInterface( pSrcFrame, pBGRA, nWidth, nHeight, &nStride, &lAspectX, &lAspectY ) )
|
||
return NULL;
|
||
|
||
if( lAspectX > 0 && lAspectY > 0 )
|
||
{
|
||
int nNewWidth = (nHeight * lAspectX + lAspectY - 1) / lAspectY;
|
||
if( nNewWidth != nWidth )
|
||
{
|
||
BYTE* pBuffer = NULL;
|
||
IMediaFrame* pResult = CreateBgraFrame( nNewWidth, nHeight, &pBuffer );
|
||
if( !pResult )
|
||
return NULL;
|
||
|
||
if( nStride < 0 )
|
||
pResult->put_ColorSpace( CSP_VFLIP | CSP_BGRA );
|
||
|
||
IppiSize SrcSize = {nWidth, nHeight};
|
||
IppiSize DstSize = {nNewWidth, nHeight};
|
||
IppiRect SrcRect = {0, 0, nWidth, nHeight};
|
||
|
||
ippiResize_8u_C4R( pBGRA, SrcSize, nWidth * 4, SrcRect, pBuffer, nNewWidth * 4, DstSize, double(nNewWidth)/nWidth, 1, IPPI_INTER_CUBIC );
|
||
|
||
return pResult;
|
||
}
|
||
}
|
||
|
||
pSrcFrame->AddRef();
|
||
return pSrcFrame;
|
||
}
|
||
|
||
DWORD GetBaseRandom( int base )
|
||
{
|
||
if( base < 0 )
|
||
return ::rand();
|
||
|
||
return (DWORD)base;
|
||
}
|
||
|
||
class ImageCache
|
||
{
|
||
protected:
|
||
typedef ATL::CAtlMap<CString, IUnknown*> ImageMap;
|
||
|
||
protected:
|
||
ImageMap m_mapImages;
|
||
|
||
public:
|
||
ImageCache()
|
||
{
|
||
}
|
||
|
||
~ImageCache()
|
||
{
|
||
RemoveAll();
|
||
}
|
||
|
||
IUnknown* GetImage( const CString& sFilePath )
|
||
{
|
||
if( sFilePath.GetLength() <= 0 )
|
||
return NULL;
|
||
|
||
ImageMap::CPair* pPair = m_mapImages.Lookup( sFilePath );
|
||
IUnknown* pInterface = NULL;
|
||
|
||
if( pPair )
|
||
{
|
||
pInterface = pPair->m_value;
|
||
if( pInterface )
|
||
{
|
||
return pInterface;
|
||
}
|
||
|
||
m_mapImages.RemoveKey( sFilePath );
|
||
}
|
||
|
||
Core::COM::COM_LoadImage( &pInterface, sFilePath, 0 );
|
||
|
||
if( pInterface )
|
||
{
|
||
m_mapImages.SetAt( sFilePath, pInterface );
|
||
}
|
||
|
||
return pInterface;
|
||
}
|
||
|
||
void Clear()
|
||
{
|
||
POSITION pos = m_mapImages.GetStartPosition();
|
||
|
||
while( pos )
|
||
{
|
||
POSITION temp = pos;
|
||
IUnknown* pInterface = m_mapImages.GetNextValue( pos );
|
||
|
||
if( pInterface )
|
||
{
|
||
if( pInterface->Release() < 1 )
|
||
{
|
||
pInterface = NULL;
|
||
m_mapImages.RemoveAtPos( temp );
|
||
}
|
||
else
|
||
{
|
||
pInterface->AddRef();
|
||
}
|
||
}
|
||
}
|
||
}
|
||
void RemoveAll()
|
||
{
|
||
POSITION pos = m_mapImages.GetStartPosition();
|
||
|
||
while( pos )
|
||
{
|
||
IUnknown* pInterface = m_mapImages.GetNextValue( pos );
|
||
|
||
if( pInterface )
|
||
{
|
||
pInterface->Release();
|
||
pInterface = NULL;
|
||
}
|
||
}
|
||
|
||
m_mapImages.RemoveAll();
|
||
}
|
||
};
|
||
|
||
class AnimImageInfo
|
||
{
|
||
protected:
|
||
int* m_pFrameDelays;
|
||
SIZE* m_pSizeFrames;
|
||
int m_nCountFrames;
|
||
int m_nLoopCount;
|
||
int m_nFileType; // tiff = 1, gif = 2 or any = 0
|
||
|
||
public:
|
||
int m_nCurFrame;
|
||
|
||
public:
|
||
AnimImageInfo()
|
||
{
|
||
m_pFrameDelays = NULL;
|
||
m_pSizeFrames = NULL;
|
||
m_nCountFrames = 0;
|
||
m_nLoopCount = 0;
|
||
m_nFileType = 0; // any
|
||
m_nCurFrame = 0;
|
||
}
|
||
|
||
~AnimImageInfo()
|
||
{
|
||
if( m_pFrameDelays )
|
||
delete [] m_pFrameDelays;
|
||
|
||
if( m_pSizeFrames )
|
||
delete [] m_pSizeFrames;
|
||
}
|
||
|
||
void Clear()
|
||
{
|
||
if( m_pFrameDelays )
|
||
{
|
||
delete [] m_pFrameDelays;
|
||
m_pFrameDelays = NULL;
|
||
}
|
||
|
||
if( m_pSizeFrames )
|
||
{
|
||
delete [] m_pSizeFrames;
|
||
m_pSizeFrames = NULL;
|
||
}
|
||
|
||
m_nCountFrames = 0;
|
||
m_nLoopCount = 0;
|
||
m_nFileType = 0; // any;
|
||
}
|
||
|
||
void SetAnimImageSwf( LPCWCH wsFilePath )
|
||
{
|
||
|
||
}
|
||
|
||
void SetAnimImage( LPCWCH wsFilePath )
|
||
{
|
||
Clear();
|
||
|
||
//FILE* pFile = ::_wfopen( wsFilePath, L"rb" );
|
||
//if( !pFile )
|
||
// return;
|
||
//
|
||
//CxImage img;
|
||
|
||
//long nFilePos = ftell( pFile );
|
||
|
||
//img.SetEscape( -1 );
|
||
//if( !img.Decode( pFile, 0 ) )
|
||
//{
|
||
// fclose( pFile );
|
||
// return;
|
||
//}
|
||
|
||
//int m_nCountFrames = 1;
|
||
|
||
//DWORD dwFileType = img.GetType();
|
||
//switch( dwFileType )
|
||
//{
|
||
//case CXIMAGE_FORMAT_GIF:
|
||
//case CXIMAGE_FORMAT_ICO:
|
||
//case CXIMAGE_FORMAT_TIF:
|
||
//case CXIMAGE_FORMAT_MNG:
|
||
// fseek( pFile, nFilePos, SEEK_SET );
|
||
// img.SetEscape( 0 );
|
||
// img.SetFrame( 0 );
|
||
// img.SetRetreiveAllFrames( true );
|
||
// img.Decode( pFile, dwFileType );
|
||
// m_nCountFrames = img.GetNumFrames();
|
||
// break;
|
||
//}
|
||
|
||
//if( dwFileType == CXIMAGE_FORMAT_TIF )
|
||
// m_nFileType = 1; // tiff
|
||
//else
|
||
//if( dwFileType == CXIMAGE_FORMAT_GIF )
|
||
// m_nFileType = 2; // gif
|
||
|
||
//m_nLoopCount = 0;//((CxImageGIF*)(&img))->GetLoops();
|
||
|
||
//if( m_nCountFrames <= 0 )
|
||
//{
|
||
// fclose( pFile );
|
||
// return;
|
||
//}
|
||
|
||
//m_pFrameDelays = new int[m_nCountFrames];
|
||
//m_pSizeFrames = new SIZE[m_nCountFrames];
|
||
|
||
//if( m_pFrameDelays && m_pSizeFrames )
|
||
//{
|
||
// ::memset( m_pFrameDelays, 0, m_nCountFrames * sizeof(int) );
|
||
// ::memset( m_pSizeFrames, 0, m_nCountFrames * sizeof(SIZE) );
|
||
//
|
||
// if( m_nCountFrames > 1 )
|
||
// {
|
||
// for( int i = 0; i < m_nCountFrames; i++ )
|
||
// {
|
||
// CxImage* frame = img.GetFrame( i );
|
||
// if( !frame )
|
||
// continue;
|
||
|
||
// m_pFrameDelays[i] = frame->GetFrameDelay();
|
||
// m_pSizeFrames[i].cx = frame->GetWidth();
|
||
// m_pSizeFrames[i].cy = frame->GetHeight();
|
||
// }
|
||
// }
|
||
// else
|
||
// {
|
||
// m_pSizeFrames[0].cx = img.GetWidth();
|
||
// m_pSizeFrames[0].cy = img.GetHeight();
|
||
// }
|
||
//}
|
||
|
||
//fclose( pFile );
|
||
|
||
try
|
||
{
|
||
Gdiplus::Bitmap bitmap( wsFilePath );
|
||
if( bitmap.GetLastStatus() != Gdiplus::Ok )
|
||
{
|
||
SetAnimImageSwf( wsFilePath );
|
||
return;
|
||
}
|
||
|
||
GUID format;
|
||
const GUID* pId = NULL;
|
||
int nFrames = 0;
|
||
|
||
// retrieve image format
|
||
bitmap.GetRawFormat(&format);
|
||
|
||
// check for format type
|
||
if( format == Gdiplus::ImageFormatTIFF )
|
||
{
|
||
pId = &FrameDimensionPage;
|
||
m_nFileType = 1; // tiff
|
||
}
|
||
else if( format == Gdiplus::ImageFormatGIF )
|
||
{
|
||
pId = &FrameDimensionTime;
|
||
m_nFileType = 2; // gif
|
||
}
|
||
|
||
if( pId )
|
||
nFrames = bitmap.GetFrameCount( pId );
|
||
|
||
if( nFrames <= 0 )
|
||
return;
|
||
|
||
m_pFrameDelays = new int[nFrames];
|
||
if( !m_pFrameDelays )
|
||
return;
|
||
|
||
::memset( m_pFrameDelays, 0, nFrames * sizeof(int) );
|
||
|
||
m_nCountFrames = nFrames;
|
||
|
||
int nSizeTag = bitmap.GetPropertyItemSize( PropertyTagLoopCount );
|
||
if( nSizeTag > 0 )
|
||
{
|
||
PropertyItem* pProp = (PropertyItem*)(malloc(nSizeTag));
|
||
if( pProp )
|
||
{
|
||
bitmap.GetPropertyItem( PropertyTagLoopCount, nSizeTag, pProp );
|
||
|
||
m_nLoopCount = *(short*)(pProp->value);
|
||
|
||
free(pProp);
|
||
}
|
||
}
|
||
|
||
nSizeTag = bitmap.GetPropertyItemSize( PropertyTagFrameDelay );
|
||
if( nSizeTag > 0 )
|
||
{
|
||
PropertyItem* pProp = (PropertyItem*)(malloc(nSizeTag));
|
||
if( pProp )
|
||
{
|
||
bitmap.GetPropertyItem( PropertyTagFrameDelay, nSizeTag, pProp );
|
||
if( nFrames * 4 == pProp->length )
|
||
{
|
||
for( int i = 0; i < nFrames; ++i )
|
||
{
|
||
m_pFrameDelays[i] = *((long*)(pProp->value) + i);
|
||
}
|
||
}
|
||
|
||
free(pProp);
|
||
}
|
||
}
|
||
|
||
if( m_nCountFrames )
|
||
{
|
||
m_pSizeFrames = new SIZE[m_nCountFrames];
|
||
if( m_pSizeFrames )
|
||
{
|
||
const GUID* pGuidFrame = NULL;
|
||
|
||
switch( m_nFileType )
|
||
{
|
||
case 1: pGuidFrame = &FrameDimensionPage; break;
|
||
case 2: pGuidFrame = &FrameDimensionTime; break;
|
||
}
|
||
|
||
if( pGuidFrame )
|
||
{
|
||
for( int i = 0; i < m_nCountFrames; i++ )
|
||
{
|
||
bitmap.SelectActiveFrame( pGuidFrame, i );
|
||
|
||
m_pSizeFrames[i].cx = bitmap.GetWidth();
|
||
m_pSizeFrames[i].cy = bitmap.GetHeight();
|
||
}
|
||
}
|
||
else
|
||
{
|
||
m_pSizeFrames[0].cx = bitmap.GetWidth();
|
||
m_pSizeFrames[0].cy = bitmap.GetHeight();
|
||
}
|
||
}
|
||
}
|
||
}
|
||
catch(...)
|
||
{
|
||
}
|
||
}
|
||
|
||
|
||
int GetCountFrames() const
|
||
{
|
||
return m_nCountFrames;
|
||
}
|
||
|
||
BOOL IsBadFrame( int nFrame ) const
|
||
{
|
||
return nFrame < 0 || nFrame >= m_nCountFrames;
|
||
}
|
||
|
||
int GetFrameDelay( int nFrame ) const
|
||
{
|
||
if( IsBadFrame( nFrame ) || !m_pFrameDelays )
|
||
return 0;
|
||
|
||
return m_pFrameDelays[nFrame];
|
||
}
|
||
|
||
int GetFrameWidth( int nFrame ) const
|
||
{
|
||
if( IsBadFrame( nFrame ) || !m_pSizeFrames )
|
||
return -1;
|
||
|
||
return m_pSizeFrames[nFrame].cx;
|
||
}
|
||
|
||
int GetFrameWidth() const
|
||
{
|
||
return GetFrameWidth( m_nCurFrame );
|
||
}
|
||
|
||
int GetFrameHeight( int nFrame ) const
|
||
{
|
||
if( IsBadFrame( nFrame ) || !m_pSizeFrames )
|
||
return -1;
|
||
|
||
return m_pSizeFrames[nFrame].cy;
|
||
}
|
||
|
||
int GetFrameHeight() const
|
||
{
|
||
return GetFrameHeight( m_nCurFrame );
|
||
}
|
||
|
||
int GetLoopCount() const
|
||
{
|
||
return m_nLoopCount;
|
||
}
|
||
|
||
int GetFileType() const
|
||
{
|
||
return m_nFileType;
|
||
}
|
||
};
|
||
|
||
class ImageCLSID
|
||
{
|
||
protected:
|
||
enum
|
||
{
|
||
Init_Bmp = (1<<1),
|
||
Init_Jpg = (1<<2),
|
||
Init_Gif = (1<<3),
|
||
Init_Tif = (1<<4),
|
||
Init_Png = (1<<5),
|
||
};
|
||
|
||
CLSID m_oCLSID[5];
|
||
|
||
DWORD m_dwInit;
|
||
|
||
public:
|
||
enum
|
||
{
|
||
CLSID_Bmp = 0,
|
||
CLSID_Jpg = 1,
|
||
CLSID_Gif = 2,
|
||
CLSID_Tif = 3,
|
||
CLSID_Png = 4,
|
||
};
|
||
|
||
ImageCLSID()
|
||
{
|
||
m_dwInit = 0;
|
||
}
|
||
|
||
CLSID* GetCLSID( int type )
|
||
{
|
||
if( type < 0 || type > 4 )
|
||
return NULL;
|
||
|
||
if( !(m_dwInit & 1) )
|
||
{
|
||
m_dwInit |= 1;
|
||
|
||
if( !GetEncoderClsid() )
|
||
return NULL;
|
||
}
|
||
|
||
if( (m_dwInit & (1 << (type + 1))) )
|
||
return &m_oCLSID[type];
|
||
|
||
return NULL;
|
||
}
|
||
|
||
protected:
|
||
BOOL GetEncoderClsid()
|
||
{
|
||
UINT num = 0; // number of image encoders
|
||
UINT size = 0; // size of the image encoder array in bytes
|
||
|
||
Gdiplus::ImageCodecInfo* pImageCodecInfo = NULL;
|
||
|
||
try
|
||
{
|
||
GetImageEncodersSize( &num, &size );
|
||
if( !size )
|
||
return FALSE; // Failure
|
||
|
||
pImageCodecInfo = (ImageCodecInfo*)(malloc(size));
|
||
if( !pImageCodecInfo )
|
||
return FALSE; // Failure
|
||
|
||
GetImageEncoders( num, size, pImageCodecInfo );
|
||
|
||
for( UINT i = 0; i < num; ++i )
|
||
{
|
||
const WCHAR* pStrType = pImageCodecInfo[i].MimeType;
|
||
CLSID* pClsid = &pImageCodecInfo[i].Clsid;
|
||
|
||
if( !(m_dwInit & Init_Bmp) )
|
||
{
|
||
if( 0 == wcscmp( pStrType, L"image/bmp" ) )
|
||
{
|
||
m_oCLSID[CLSID_Bmp] = *pClsid;
|
||
m_dwInit |= Init_Bmp;
|
||
continue;
|
||
}
|
||
}
|
||
else if( !(m_dwInit & Init_Jpg) )
|
||
{
|
||
if( 0 == wcscmp( pStrType, L"image/jpeg" ) )
|
||
{
|
||
m_oCLSID[CLSID_Jpg] = *pClsid;
|
||
m_dwInit |= Init_Jpg;
|
||
continue;
|
||
}
|
||
}
|
||
else if( !(m_dwInit & Init_Gif) )
|
||
{
|
||
if( 0 == wcscmp( pStrType, L"image/gif" ) )
|
||
{
|
||
m_oCLSID[CLSID_Gif] = *pClsid;
|
||
m_dwInit |= Init_Gif;
|
||
continue;
|
||
}
|
||
}
|
||
else if( !(m_dwInit & Init_Tif) )
|
||
{
|
||
if( 0 == wcscmp( pStrType, L"image/tiff" ) )
|
||
{
|
||
m_oCLSID[CLSID_Tif] = *pClsid;
|
||
m_dwInit |= Init_Tif;
|
||
continue;
|
||
}
|
||
}
|
||
else if( !(m_dwInit & Init_Png) )
|
||
{
|
||
if( 0 == wcscmp( pStrType, L"image/png" ) )
|
||
{
|
||
m_oCLSID[CLSID_Png] = *pClsid;
|
||
m_dwInit |= Init_Png;
|
||
continue;
|
||
}
|
||
}
|
||
}
|
||
|
||
free(pImageCodecInfo);
|
||
}
|
||
catch(...)
|
||
{
|
||
m_dwInit = 0;
|
||
return FALSE;
|
||
}
|
||
|
||
return TRUE;
|
||
}
|
||
};
|
||
|
||
|
||
class MetaFrame
|
||
{
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
|
||
public:
|
||
double m_dDuration;
|
||
double m_dTimeStamp;
|
||
|
||
long m_lAspectX;
|
||
long m_lAspectY;
|
||
|
||
VARIANT_BOOL m_vbInterlaced;
|
||
VARIANT_BOOL m_vbDiscontinuity;
|
||
|
||
public:
|
||
MetaFrame()
|
||
{
|
||
Clear();
|
||
}
|
||
|
||
MetaFrame( IMediaFrame* pFrame )
|
||
{
|
||
FromMediaFrame( pFrame );
|
||
}
|
||
|
||
MetaFrame( IUnknown* pInterface )
|
||
{
|
||
FromInterface( pInterface );
|
||
}
|
||
|
||
|
||
void Clear()
|
||
{
|
||
m_dDuration = 0;
|
||
m_dTimeStamp = 0;
|
||
|
||
m_lAspectX = 0;
|
||
m_lAspectY = 0;
|
||
|
||
m_vbInterlaced = VARIANT_FALSE;
|
||
m_vbDiscontinuity = VARIANT_FALSE;
|
||
}
|
||
|
||
BOOL FromMediaFrame( IMediaFrame* pFrame )
|
||
{
|
||
if( pFrame )
|
||
{
|
||
try
|
||
{
|
||
pFrame->get_Duration( &m_dDuration );
|
||
pFrame->get_TimeStamp( &m_dTimeStamp );
|
||
|
||
pFrame->get_AspectRatioX( &m_lAspectX );
|
||
pFrame->get_AspectRatioY( &m_lAspectY );
|
||
|
||
pFrame->get_Interlaced( &m_vbInterlaced );
|
||
pFrame->get_IsDiscontinuity( &m_vbDiscontinuity );
|
||
|
||
long lWidth; pFrame->get_Width( &lWidth );
|
||
if( m_lAspectX == lWidth )
|
||
m_lAspectX = 0;
|
||
|
||
long lHeight; pFrame->get_Height( &lHeight );
|
||
if( m_lAspectY == lHeight )
|
||
m_lAspectY = 0;
|
||
|
||
return TRUE;
|
||
}
|
||
catch(...)
|
||
{
|
||
ATLTRACE(_T("Exception! Is bad UncompressedVideoFrame ptr! (reading metadata)"));
|
||
}
|
||
}
|
||
|
||
Clear();
|
||
|
||
return FALSE;
|
||
}
|
||
|
||
BOOL FromInterface( IUnknown* pInterface )
|
||
{
|
||
if( pInterface )
|
||
{
|
||
IMediaFrame* pFrame = NULL;
|
||
|
||
try
|
||
{
|
||
pInterface->QueryInterface( MediaCore::IID_IAVSUncompressedVideoFrame, (void**)&pFrame );
|
||
}
|
||
catch(...)
|
||
{
|
||
ATLTRACE(_T("Exception! Is bad interface ptr! (query to UncompressedVideoFrame)"));
|
||
}
|
||
|
||
if( pFrame )
|
||
{
|
||
BOOL bSuccess = FromMediaFrame( pFrame );
|
||
|
||
pFrame->Release();
|
||
|
||
return bSuccess;
|
||
}
|
||
}
|
||
|
||
Clear();
|
||
|
||
return FALSE;
|
||
}
|
||
|
||
BOOL ToMediaFrame( IMediaFrame* pFrame ) const
|
||
{
|
||
if( pFrame )
|
||
{
|
||
try
|
||
{
|
||
pFrame->put_Duration( m_dDuration );
|
||
pFrame->put_TimeStamp( m_dTimeStamp );
|
||
|
||
pFrame->put_AspectRatioX( m_lAspectX );
|
||
pFrame->put_AspectRatioY( m_lAspectY );
|
||
|
||
pFrame->put_Interlaced( m_vbInterlaced );
|
||
pFrame->put_IsDiscontinuity( m_vbDiscontinuity );
|
||
|
||
return TRUE;
|
||
}
|
||
catch(...)
|
||
{
|
||
ATLTRACE(_T("Exception! Is bad UncompressedVideoFrame ptr! (writing metadata)"));
|
||
}
|
||
}
|
||
|
||
return FALSE;
|
||
}
|
||
|
||
BOOL ToInterface( IUnknown* pInterface ) const
|
||
{
|
||
if( pInterface )
|
||
{
|
||
IMediaFrame* pFrame = NULL;
|
||
|
||
try
|
||
{
|
||
pInterface->QueryInterface( MediaCore::IID_IAVSUncompressedVideoFrame, (void**)&pFrame );
|
||
}
|
||
catch(...)
|
||
{
|
||
ATLTRACE(_T("Exception! Is bad interface ptr! (query to UncompressedVideoFrame)"));
|
||
}
|
||
|
||
if( pFrame )
|
||
{
|
||
BOOL bSuccess = ToMediaFrame( pFrame );
|
||
|
||
pFrame->Release();
|
||
|
||
return bSuccess;
|
||
}
|
||
}
|
||
|
||
return FALSE;
|
||
}
|
||
|
||
static void Copy( IMediaFrame* src, IMediaFrame* dst )
|
||
{
|
||
MetaFrame data( src );
|
||
data.ToMediaFrame( dst );
|
||
}
|
||
};
|
||
|
||
class CSourceItem
|
||
{
|
||
protected:
|
||
IMediaFrame* m_pFrame;
|
||
Gdiplus::Bitmap* m_pBitmap;
|
||
IO::CMetaFile* m_pMetafile;
|
||
|
||
public:
|
||
BOOL m_bReadOnly;
|
||
BOOL m_bUpdateMetafile;
|
||
|
||
public:
|
||
CSourceItem()
|
||
{
|
||
m_pFrame = NULL;
|
||
m_pBitmap = NULL;
|
||
m_pMetafile = NULL;
|
||
|
||
m_bReadOnly = FALSE;
|
||
m_bUpdateMetafile = FALSE;
|
||
}
|
||
|
||
~CSourceItem()
|
||
{
|
||
Clear();
|
||
}
|
||
|
||
void Clear()
|
||
{
|
||
ReleaseBitmap();
|
||
ReleaseFrame();
|
||
ReleaseMetafile();
|
||
}
|
||
|
||
void SetFrame( IMediaFrame* pFrame )
|
||
{
|
||
Clear();
|
||
|
||
m_pFrame = pFrame;
|
||
}
|
||
|
||
void SetBitmap( Gdiplus::Bitmap* pBitmap, IMediaFrame* pMetadata )
|
||
{
|
||
Clear();
|
||
|
||
m_pFrame = pMetadata;
|
||
m_pBitmap = pBitmap;
|
||
}
|
||
void SetBitmap( Gdiplus::Bitmap* pBitmap, BOOL bUseOwnMetadata = TRUE )
|
||
{
|
||
IMediaFrame* pMetadata = bUseOwnMetadata ? m_pFrame : NULL;
|
||
if( pMetadata )
|
||
pMetadata->AddRef();
|
||
|
||
SetBitmap( pBitmap, pMetadata );
|
||
}
|
||
|
||
void SetMetafile( IO::CMetaFile* pMetafile )
|
||
{
|
||
Clear();
|
||
|
||
m_pMetafile = pMetafile;
|
||
|
||
m_bUpdateMetafile = TRUE;
|
||
}
|
||
|
||
BOOL IsEmpty() const
|
||
{
|
||
return !m_pFrame && !m_pMetafile;
|
||
}
|
||
|
||
BOOL IsMetafile() const
|
||
{
|
||
return m_pMetafile != NULL;
|
||
}
|
||
|
||
|
||
IMediaFrame* GetFrame()
|
||
{
|
||
ReleaseBitmap();
|
||
|
||
if( m_pMetafile )
|
||
{
|
||
if( m_bUpdateMetafile )
|
||
{
|
||
SetFrame( m_pMetafile->ConvertToBitmap() );
|
||
}
|
||
else
|
||
{
|
||
ReleaseMetafile();
|
||
}
|
||
}
|
||
|
||
return m_pFrame;
|
||
}
|
||
|
||
IMediaFrame* GetResultFrame()
|
||
{
|
||
ReleaseBitmap();
|
||
|
||
if( m_pMetafile )
|
||
{
|
||
if( m_bUpdateMetafile )
|
||
{
|
||
m_bUpdateMetafile = FALSE;
|
||
|
||
ReleaseFrame();
|
||
|
||
m_pFrame = m_pMetafile->ConvertToBitmap();
|
||
}
|
||
}
|
||
|
||
return m_pFrame;
|
||
}
|
||
|
||
|
||
BYTE* CheckFrameForWriting( int nWidth, int nHeight, int &nStride )
|
||
{
|
||
ReleaseBitmap();
|
||
ReleaseMetafile();
|
||
|
||
IMediaFrame* frame = m_pFrame;
|
||
|
||
if( !frame )
|
||
{
|
||
CoCreateInstance( MediaCore::CLSID_CAVSUncompressedVideoFrame, NULL, CLSCTX_ALL, MediaCore::IID_IAVSUncompressedVideoFrame, (void**)(&frame) );
|
||
if( !frame )
|
||
return NULL;
|
||
}
|
||
|
||
long lAspectX, lAspectY;
|
||
frame->get_AspectRatioX( &lAspectX );
|
||
frame->get_AspectRatioY( &lAspectY );
|
||
|
||
long lWidth, lHeight;
|
||
frame->get_Width( &lWidth );
|
||
frame->get_Height( &lHeight );
|
||
|
||
if( m_bReadOnly )
|
||
{
|
||
frame = NULL;
|
||
CoCreateInstance( MediaCore::CLSID_CAVSUncompressedVideoFrame, NULL, CLSCTX_ALL, MediaCore::IID_IAVSUncompressedVideoFrame, (void**)(&frame) );
|
||
if( !frame )
|
||
return NULL;
|
||
|
||
MetaFrame::Copy( m_pFrame, frame );
|
||
}
|
||
|
||
frame->put_Width( nWidth );
|
||
frame->put_Height( nHeight );
|
||
frame->put_ColorSpace( CSP_BGRA );
|
||
frame->SetDefaultStrides();
|
||
frame->AllocateBuffer( -1 );
|
||
|
||
BYTE* pBuffer = 0;
|
||
frame->get_Buffer( &pBuffer );
|
||
if( !pBuffer )
|
||
{
|
||
frame->Release();
|
||
return NULL;
|
||
}
|
||
|
||
long lStride;
|
||
frame->get_Stride( 0, &lStride );
|
||
nStride = lStride;
|
||
|
||
if( lAspectX <= 0 || lAspectX == lWidth ) frame->put_AspectRatioX( nWidth );
|
||
if( lAspectY <= 0 || lAspectY == lHeight ) frame->put_AspectRatioY( nHeight );
|
||
|
||
if( m_pFrame != frame )
|
||
{
|
||
ReleaseFrame();
|
||
m_pFrame = frame;
|
||
}
|
||
|
||
return pBuffer;
|
||
}
|
||
|
||
Gdiplus::Bitmap* GetBitmap()
|
||
{
|
||
return m_pBitmap;
|
||
}
|
||
IO::CMetaFile* GetMetafile()
|
||
{
|
||
return m_pMetafile;
|
||
}
|
||
|
||
|
||
BOOL GetMetric( int nMetric, double &dMetricX, double &dMetricY ) const
|
||
{
|
||
long lWidth, lHeight;
|
||
|
||
if( m_pMetafile )
|
||
{
|
||
lWidth = m_pMetafile->GetWidth();
|
||
lHeight = m_pMetafile->GetHeight();
|
||
}
|
||
else
|
||
if( m_pFrame )
|
||
{
|
||
m_pFrame->get_Width( &lWidth );
|
||
m_pFrame->get_Height( &lHeight );
|
||
}
|
||
else
|
||
{
|
||
return FALSE;
|
||
}
|
||
|
||
if( lWidth <= 0 || lHeight <= 0 )
|
||
return FALSE;
|
||
|
||
dMetricX = ImageStudio::Transforms::GetMetric( nMetric, lWidth );
|
||
dMetricY = ImageStudio::Transforms::GetMetric( nMetric, lHeight );
|
||
|
||
return TRUE;
|
||
}
|
||
int GetCountPixels() const
|
||
{
|
||
long lWidth, lHeight;
|
||
|
||
if( m_pMetafile )
|
||
{
|
||
lWidth = m_pMetafile->GetWidth();
|
||
lHeight = m_pMetafile->GetHeight();
|
||
}
|
||
else
|
||
if( m_pFrame )
|
||
{
|
||
m_pFrame->get_Width( &lWidth );
|
||
m_pFrame->get_Height( &lHeight );
|
||
}
|
||
else
|
||
{
|
||
return 0;
|
||
}
|
||
|
||
return lWidth * lHeight;
|
||
}
|
||
|
||
static IMediaFrame* BitmapToBgraFrame( Gdiplus::Bitmap* pBitmap, IMediaFrame* pMetadata )
|
||
{
|
||
if( !pBitmap )
|
||
return NULL;
|
||
|
||
int nWidth = pBitmap->GetWidth();
|
||
int nHeight = pBitmap->GetHeight();
|
||
|
||
if( nWidth <= 0 || nHeight <= 0 )
|
||
return NULL;
|
||
|
||
IMediaFrame* pResult = CreateFrame( pMetadata, FALSE, TRUE );
|
||
if( !pResult )
|
||
return NULL;
|
||
|
||
|
||
pResult->put_ColorSpace( CSP_BGRA );
|
||
pResult->put_Width( nWidth );
|
||
pResult->put_Height( nHeight );
|
||
|
||
pResult->SetDefaultStrides();
|
||
pResult->AllocateBuffer( -1 );
|
||
|
||
long lAspectX = 0; pResult->get_AspectRatioX( &lAspectX );
|
||
if( lAspectX <= 0 )
|
||
pResult->put_AspectRatioX( nWidth );
|
||
|
||
long lAspectY = 0; pResult->get_AspectRatioY( &lAspectY );
|
||
if( lAspectY <= 0 )
|
||
pResult->put_AspectRatioY( nHeight );
|
||
|
||
|
||
BYTE* pBuffer = NULL; pResult->get_Buffer( &pBuffer );
|
||
long nStride = 0; pResult->get_Stride( 0, &nStride );
|
||
|
||
Gdiplus::BitmapData data;
|
||
|
||
if( Gdiplus::Ok != pBitmap->LockBits( NULL, Gdiplus::ImageLockModeRead, PixelFormat32bppARGB, &data ) )
|
||
{
|
||
pResult->Release();
|
||
return NULL;
|
||
}
|
||
|
||
BYTE* pSrc = (BYTE*)data.Scan0;
|
||
BYTE* pDst = pBuffer;
|
||
|
||
for( int y = 0; y < nHeight; ++y, pDst += nStride, pSrc += data.Stride )
|
||
{
|
||
::memcpy( pDst, pSrc, nWidth * 4 );
|
||
}
|
||
|
||
pBitmap->UnlockBits( &data );
|
||
|
||
return pResult;
|
||
}
|
||
|
||
static IMediaFrame* CreateFrame( IMediaFrame* pSource, BOOL bCopyData, BOOL bCopyMetadataOnly )
|
||
{
|
||
IMediaFrame* pResult = NULL;
|
||
|
||
if( bCopyData )
|
||
{
|
||
if( pSource )
|
||
{
|
||
MediaCore::IAVSMediaData* pClone = NULL;
|
||
pSource->CreateDuplicate( DUBLICATE_TYPE_COPY, &pClone );
|
||
if( pClone )
|
||
{
|
||
pClone->QueryInterface( MediaCore::IID_IAVSUncompressedVideoFrame, (void**)&pResult );
|
||
pClone->Release();
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
CoCreateInstance( MediaCore::CLSID_CAVSUncompressedVideoFrame, NULL, CLSCTX_ALL, MediaCore::IID_IAVSUncompressedVideoFrame, (void**)(&pResult) );
|
||
if( pResult && pSource )
|
||
{
|
||
long lValue;
|
||
pSource->get_AspectRatioX( &lValue ); pResult->put_AspectRatioX( lValue );
|
||
pSource->get_AspectRatioY( &lValue ); pResult->put_AspectRatioY( lValue );
|
||
pSource->get_ColorSpace( &lValue ); pResult->put_ColorSpace( (lValue & ~CSP_COLOR_MASK) | CSP_BGRA );
|
||
|
||
if( !bCopyMetadataOnly )
|
||
{
|
||
pSource->get_Width( &lValue ); pResult->put_Width( lValue );
|
||
pSource->get_Height( &lValue ); pResult->put_Height( lValue );
|
||
|
||
pResult->SetDefaultStrides();
|
||
pResult->AllocateBuffer( -1 );
|
||
}
|
||
|
||
double dValue;
|
||
pSource->get_Duration( &dValue ); pResult->put_Duration( dValue );
|
||
pSource->get_TimeStamp( &dValue ); pResult->put_TimeStamp( dValue );
|
||
|
||
VARIANT_BOOL vbValue;
|
||
pSource->get_Interlaced( &vbValue ); pResult->put_Interlaced( vbValue );
|
||
pSource->get_IsDiscontinuity( &vbValue ); pResult->put_IsDiscontinuity( vbValue );
|
||
}
|
||
}
|
||
|
||
return pResult;
|
||
}
|
||
|
||
static IMediaFrame* Clone( IMediaFrame* pSource )
|
||
{
|
||
return CreateFrame( pSource, TRUE, FALSE );
|
||
}
|
||
|
||
protected:
|
||
void ReleaseFrame()
|
||
{
|
||
RELEASEINTERFACE(m_pFrame);
|
||
|
||
m_bReadOnly = FALSE;
|
||
}
|
||
|
||
void ReleaseBitmap()
|
||
{
|
||
if( m_pBitmap )
|
||
{
|
||
delete m_pBitmap;
|
||
m_pBitmap = NULL;
|
||
}
|
||
}
|
||
void ReleaseMetafile()
|
||
{
|
||
if( m_pMetafile )
|
||
{
|
||
delete m_pMetafile;
|
||
m_pMetafile = NULL;
|
||
}
|
||
|
||
m_bUpdateMetafile = FALSE;
|
||
}
|
||
|
||
};
|
||
|
||
class CSourceArray
|
||
{
|
||
protected:
|
||
static const int c_nCountSourcesDefault = 16;
|
||
static const int c_nMaxCountSources = 65536;
|
||
|
||
|
||
protected:
|
||
CSourceItem* m_pSources; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
int m_nCountSources; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
|
||
MediaFormat::IAVSVideoFormat* m_pFormat;
|
||
MediaCore::IAVSVideoFrameTransform* m_pTransform;
|
||
|
||
public:
|
||
CSourceArray()
|
||
{
|
||
m_pSources = new CSourceItem[c_nCountSourcesDefault];
|
||
m_nCountSources = m_pSources ? c_nCountSourcesDefault : 0;
|
||
|
||
m_pFormat = NULL;
|
||
m_pTransform = NULL;
|
||
}
|
||
~CSourceArray()
|
||
{
|
||
Release();
|
||
|
||
RELEASEINTERFACE(m_pFormat);
|
||
RELEASEINTERFACE(m_pTransform);
|
||
}
|
||
|
||
|
||
void Release()
|
||
{
|
||
if( m_pSources )
|
||
{
|
||
delete [] m_pSources;
|
||
|
||
m_pSources = NULL;
|
||
m_nCountSources = 0;
|
||
}
|
||
}
|
||
|
||
BOOL Resize( int size )
|
||
{
|
||
if( size <= 0 || size > c_nMaxCountSources )
|
||
return FALSE;
|
||
|
||
if( size == m_nCountSources )
|
||
return TRUE;
|
||
|
||
CSourceItem* pNewBuf = new CSourceItem[size];
|
||
if( !pNewBuf )
|
||
return FALSE;
|
||
|
||
int nCopyCount = min(size, m_nCountSources);
|
||
if( nCopyCount > 0 )
|
||
{
|
||
::memcpy( pNewBuf, m_pSources, sizeof(CSourceItem) * nCopyCount );
|
||
}
|
||
|
||
if( nCopyCount < size )
|
||
{
|
||
::memset( pNewBuf + nCopyCount, 0, (size - nCopyCount) * sizeof(CSourceItem) );
|
||
}
|
||
|
||
for( int i = nCopyCount; i < m_nCountSources; i++ )
|
||
{
|
||
m_pSources[i].Clear();
|
||
};
|
||
|
||
char* pBuffer = reinterpret_cast<char*>(m_pSources);
|
||
delete [] pBuffer;
|
||
|
||
m_pSources = pNewBuf;
|
||
m_nCountSources = size;
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
|
||
BOOL IsBadIndex( int nIndex ) const
|
||
{
|
||
return nIndex < 0 || nIndex >= m_nCountSources;
|
||
}
|
||
|
||
BOOL IsGoodIndex( int nIndex ) const
|
||
{
|
||
return !IsBadIndex( nIndex );
|
||
}
|
||
|
||
BOOL IsEmptySource( int nIndex ) const
|
||
{
|
||
if( IsBadIndex( nIndex ) )
|
||
return TRUE;
|
||
|
||
return m_pSources[nIndex].IsEmpty();
|
||
}
|
||
BOOL IsValidSource( int nIndex ) const
|
||
{
|
||
return !IsEmptySource( nIndex );
|
||
}
|
||
|
||
BOOL Clear( int nIndex )
|
||
{
|
||
if( IsBadIndex( nIndex ) )
|
||
return FALSE;
|
||
|
||
m_pSources[nIndex].Clear();
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
BOOL Copy( int nSrcIndex, int nDstIndex )
|
||
{
|
||
if( nSrcIndex == nDstIndex )
|
||
return TRUE;
|
||
|
||
if( IsBadIndex( nSrcIndex ) || IsBadIndex( nDstIndex ) )
|
||
return FALSE;
|
||
|
||
m_pSources[nDstIndex].Clear();
|
||
|
||
IMediaFrame* pSource = m_pSources[nSrcIndex].GetFrame();
|
||
if( pSource )
|
||
{
|
||
//pSource->AddRef();
|
||
|
||
m_pSources[nDstIndex].SetFrame( CSourceItem::CreateFrame( pSource, TRUE, FALSE ) );
|
||
m_pSources[nDstIndex].m_bReadOnly = FALSE;
|
||
}
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
|
||
BOOL SetSource( int nIndex, IUnknown* pSource, BOOL bReplace, BOOL bReadOnly )
|
||
{
|
||
if( IsBadIndex( nIndex ) )
|
||
return FALSE;
|
||
|
||
m_pSources[nIndex].Clear();
|
||
|
||
if( !pSource )
|
||
return TRUE;
|
||
|
||
IMediaFrame* pFrame = NULL;
|
||
pSource->QueryInterface( MediaCore::IID_IAVSUncompressedVideoFrame, (void**)(&pFrame) );
|
||
|
||
if( bReplace )
|
||
{
|
||
pSource->Release();
|
||
|
||
m_pSources[nIndex].SetFrame( pFrame );
|
||
m_pSources[nIndex].m_bReadOnly = bReadOnly;
|
||
}
|
||
else
|
||
{
|
||
if( bReadOnly )
|
||
{
|
||
m_pSources[nIndex].SetFrame( ConvertToBgra( pFrame ) );
|
||
|
||
if( pFrame )
|
||
pFrame->Release();
|
||
}
|
||
else
|
||
{
|
||
m_pSources[nIndex].SetFrame( pFrame );
|
||
}
|
||
|
||
m_pSources[nIndex].m_bReadOnly = FALSE;
|
||
}
|
||
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
IUnknown* GetResultFrame( int nIndex )
|
||
{
|
||
if( IsBadIndex( nIndex ) )
|
||
return NULL;
|
||
|
||
IUnknown* pResult = m_pSources[nIndex].GetResultFrame();
|
||
if( pResult )
|
||
{
|
||
pResult->AddRef();
|
||
}
|
||
|
||
//m_pSources[nIndex].pFrame = NULL;
|
||
|
||
return pResult;
|
||
}
|
||
|
||
|
||
BOOL Set( int nIndex, IUnknown* pSource )
|
||
{
|
||
return SetSource( nIndex, pSource, TRUE, FALSE );
|
||
}
|
||
IMediaFrame* Get( int nIndex )
|
||
{
|
||
if( IsBadIndex( nIndex ) )
|
||
return NULL;
|
||
|
||
IMediaFrame* pSource = m_pSources[nIndex].GetFrame();
|
||
if( !pSource )
|
||
return NULL;
|
||
|
||
long lColorSpace = 0; pSource->get_ColorSpace( &lColorSpace );
|
||
if( (lColorSpace & CSP_COLOR_MASK) != CSP_BGRA )
|
||
{
|
||
IMediaFrame* pResult = ConvertToBgra( pSource );
|
||
|
||
m_pSources[nIndex].SetFrame( pResult );
|
||
m_pSources[nIndex].m_bReadOnly = FALSE;
|
||
|
||
return pResult;
|
||
}
|
||
|
||
if( m_pSources[nIndex].m_bReadOnly )
|
||
{
|
||
IMediaFrame* pResult = CSourceItem::CreateFrame( pSource, TRUE, FALSE );
|
||
|
||
m_pSources[nIndex].SetFrame( pResult );
|
||
m_pSources[nIndex].m_bReadOnly = FALSE;
|
||
|
||
return pResult;
|
||
}
|
||
|
||
return pSource;
|
||
}
|
||
|
||
IMediaFrame* CloneToBgra( int nIndex, BOOL bCopyData )
|
||
{
|
||
if( IsBadIndex( nIndex ) )
|
||
return NULL;
|
||
|
||
IMediaFrame* pSource = m_pSources[nIndex].GetFrame();
|
||
if( !pSource )
|
||
return NULL;
|
||
|
||
long lColorSpace = 0; pSource->get_ColorSpace( &lColorSpace );
|
||
if( (lColorSpace & CSP_COLOR_MASK) != CSP_BGRA )
|
||
{
|
||
if( bCopyData )
|
||
return ConvertToBgra( pSource );
|
||
}
|
||
|
||
return CSourceItem::CreateFrame( pSource, bCopyData, FALSE );
|
||
}
|
||
|
||
|
||
Gdiplus::Bitmap* GetBitmap( int nIndex )
|
||
{
|
||
if( IsBadIndex( nIndex ) )
|
||
return NULL;
|
||
|
||
Gdiplus::Bitmap* pResult = m_pSources[nIndex].GetBitmap();
|
||
if( pResult )
|
||
return pResult;
|
||
|
||
IMediaFrame* pFrame = m_pSources[nIndex].GetFrame();
|
||
if( !pFrame )
|
||
return NULL;
|
||
|
||
long lColorSpace = 0; pFrame->get_ColorSpace( &lColorSpace );
|
||
if( (lColorSpace & CSP_COLOR_MASK) != CSP_BGRA )
|
||
{
|
||
pFrame = ConvertToBgra( pFrame );
|
||
if( !pFrame )
|
||
return NULL;
|
||
|
||
m_pSources[nIndex].SetFrame( pFrame );
|
||
m_pSources[nIndex].m_bReadOnly = FALSE;
|
||
}
|
||
else
|
||
{
|
||
if( m_pSources[nIndex].m_bReadOnly )
|
||
{
|
||
pFrame = CSourceItem::Clone( pFrame );
|
||
|
||
m_pSources[nIndex].SetFrame( pFrame );
|
||
m_pSources[nIndex].m_bReadOnly = FALSE;
|
||
}
|
||
}
|
||
|
||
long lWidth = 0; pFrame->get_Width( &lWidth );
|
||
long lHeight = 0; pFrame->get_Height( &lHeight );
|
||
long lStride = 0; pFrame->get_Stride( 0, &lStride );
|
||
long lBufSize = 0; pFrame->get_BufferSize( &lBufSize );
|
||
BYTE* pBuffer = 0; pFrame->get_Buffer( &pBuffer );
|
||
|
||
if( !pBuffer || lWidth <= 0 || lHeight <= 0 || lStride < lWidth * 4 || lBufSize < lStride * lHeight )
|
||
{
|
||
return NULL;
|
||
}
|
||
|
||
if( lColorSpace & CSP_VFLIP )
|
||
{
|
||
pBuffer += lStride * (lHeight - 1);
|
||
lStride = -lStride;
|
||
}
|
||
|
||
pResult = new Gdiplus::Bitmap( lWidth, lHeight, lStride, PixelFormat32bppARGB, pBuffer );
|
||
|
||
m_pSources[nIndex].SetBitmap( pResult );
|
||
|
||
return pResult;
|
||
}
|
||
|
||
IDirect3DTexture9* GetTexture( int nIndex, IDirect3DDevice9* pDevice, HRESULT &nRetCode )
|
||
{
|
||
nRetCode = D3D_OK;
|
||
|
||
if( !pDevice )
|
||
return NULL;
|
||
|
||
IMediaFrame* pFrame = m_pSources[nIndex].GetFrame();
|
||
if( !pFrame )
|
||
return NULL;
|
||
|
||
long lColorSpace = 0; pFrame->get_ColorSpace( &lColorSpace );
|
||
if( (lColorSpace & CSP_COLOR_MASK) != CSP_BGRA )
|
||
{
|
||
pFrame = ConvertToBgra( pFrame );
|
||
if( !pFrame )
|
||
return NULL;
|
||
|
||
m_pSources[nIndex].SetFrame( pFrame );
|
||
m_pSources[nIndex].m_bReadOnly = FALSE;
|
||
}
|
||
|
||
long lWidth = 0; pFrame->get_Width( &lWidth );
|
||
long lHeight = 0; pFrame->get_Height( &lHeight );
|
||
long lStride = 0; pFrame->get_Stride( 0, &lStride );
|
||
long lBufSize = 0; pFrame->get_BufferSize( &lBufSize );
|
||
BYTE* pBuffer = 0; pFrame->get_Buffer( &pBuffer );
|
||
|
||
if( !pBuffer || lWidth <= 0 || lHeight <= 0 || lStride < lWidth * 4 || lBufSize < lStride * lHeight )
|
||
{
|
||
return NULL;
|
||
}
|
||
|
||
if( lColorSpace & CSP_VFLIP )
|
||
{
|
||
pBuffer += lStride * (lHeight - 1);
|
||
lStride = -lStride;
|
||
}
|
||
|
||
IDirect3DTexture9* pSource = NULL;
|
||
IDirect3DTexture9* pResult = NULL;
|
||
|
||
HRESULT hr = D3D_OK;
|
||
BOOL bSuccess = FALSE;
|
||
do
|
||
{
|
||
hr = D3DXCreateTexture( pDevice, lWidth, lHeight, 1, 0, D3DFMT_A8R8G8B8, D3DPOOL_SYSTEMMEM, &pSource );
|
||
if( FAILED(hr) )
|
||
{
|
||
DXTRACE_ERR(0, hr);
|
||
break;
|
||
}
|
||
|
||
D3DLOCKED_RECT data;
|
||
hr = pSource->LockRect( 0, &data, NULL, 0 );
|
||
if( FAILED(hr) )
|
||
{
|
||
DXTRACE_ERR(0, hr);
|
||
break;
|
||
}
|
||
|
||
if( !MemCopy( pBuffer, (BYTE*)data.pBits, lStride, data.Pitch, lHeight, lWidth * 4 ) )
|
||
break;
|
||
|
||
pSource->UnlockRect( 0 );
|
||
|
||
hr = D3DXCreateTexture( pDevice, lWidth, lHeight, 1, 0, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &pResult );
|
||
if( FAILED(hr) )
|
||
{
|
||
DXTRACE_ERR(0, hr);
|
||
break;
|
||
}
|
||
|
||
hr = pDevice->UpdateTexture( pSource, pResult );
|
||
if( FAILED(hr) )
|
||
{
|
||
DXTRACE_ERR(0, hr);
|
||
break;
|
||
}
|
||
|
||
bSuccess = TRUE;
|
||
}while(0);
|
||
|
||
RELEASEINTERFACE(pSource);
|
||
nRetCode = hr;
|
||
|
||
if( !bSuccess )
|
||
{
|
||
RELEASEINTERFACE(pResult);
|
||
return NULL;
|
||
}
|
||
|
||
return pResult;
|
||
}
|
||
|
||
BOOL SetTexture( int nIndex, IDirect3DTexture9* pSource, HRESULT &nRetCode )
|
||
{
|
||
nRetCode = D3D_OK;
|
||
|
||
if( !pSource || IsBadIndex( nIndex ) )
|
||
return FALSE;
|
||
|
||
HRESULT hr = D3D_OK;
|
||
BOOL bSuccess = FALSE;
|
||
do
|
||
{
|
||
D3DSURFACE_DESC desc;
|
||
hr = pSource->GetLevelDesc( 0, &desc );
|
||
if( FAILED(hr) )
|
||
{
|
||
DXTRACE_ERR(0, hr);
|
||
break;
|
||
}
|
||
|
||
D3DLOCKED_RECT data;
|
||
hr = pSource->LockRect( 0, &data, NULL, /*(desc.Pool != D3DPOOL_SYSTEMMEM ?*/ D3DLOCK_READONLY /*: 0)*/ );
|
||
if( FAILED(hr) )
|
||
{
|
||
DXTRACE_ERR(0, hr);
|
||
break;
|
||
}
|
||
|
||
int nStride = 0;
|
||
BYTE* pBuffer = m_pSources[nIndex].CheckFrameForWriting( desc.Width, desc.Height, nStride );
|
||
if( !pBuffer )
|
||
break;
|
||
|
||
if( !MemCopy( (BYTE*)data.pBits, pBuffer, data.Pitch, nStride, desc.Height, desc.Width * 4 ) )
|
||
break;
|
||
|
||
pSource->UnlockRect( 0 );
|
||
|
||
bSuccess = TRUE;
|
||
}while(0);
|
||
|
||
nRetCode = hr;
|
||
return bSuccess;
|
||
}
|
||
|
||
|
||
BOOL GetMetric( int nIndex, int nMetric, double& dMetricX, double& dMetricY ) const
|
||
{
|
||
if( IsBadIndex( nIndex ) )
|
||
return FALSE;
|
||
|
||
return m_pSources[nIndex].GetMetric( nMetric, dMetricX, dMetricY );
|
||
}
|
||
|
||
BOOL GetCountPixels( int nIndex ) const
|
||
{
|
||
if( IsBadIndex( nIndex ) )
|
||
return FALSE;
|
||
|
||
return m_pSources[nIndex].GetCountPixels();
|
||
}
|
||
|
||
|
||
BOOL IsMetafile( int nIndex ) const
|
||
{
|
||
if( IsBadIndex( nIndex ) )
|
||
return FALSE;
|
||
|
||
return m_pSources[nIndex].IsMetafile();
|
||
}
|
||
|
||
IO::CMetaFile* GetMetafile( int nIndex )
|
||
{
|
||
if( IsBadIndex( nIndex ) )
|
||
return NULL;
|
||
|
||
return m_pSources[nIndex].GetMetafile();
|
||
}
|
||
|
||
BOOL SetMetafile( int nIndex, IO::CMetaFile* pMetafile )
|
||
{
|
||
if( IsBadIndex( nIndex ) )
|
||
return FALSE;
|
||
|
||
m_pSources[nIndex].SetMetafile( pMetafile );
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
void UpdateMetafile( int nIndex )
|
||
{
|
||
if( IsMetafile( nIndex ) )
|
||
{
|
||
m_pSources[nIndex].m_bUpdateMetafile = TRUE;
|
||
}
|
||
}
|
||
|
||
protected:
|
||
BOOL CheckTransform()
|
||
{
|
||
if( m_pTransform )
|
||
return TRUE;
|
||
|
||
CoCreateInstance( MediaCore::CLSID_CAVSVideoFrameTransform, NULL, CLSCTX_ALL, MediaCore::IID_IAVSVideoFrameTransform, (void**)(&m_pTransform) );
|
||
|
||
return m_pTransform != NULL;
|
||
}
|
||
|
||
BOOL CheckFormat()
|
||
{
|
||
if( m_pFormat )
|
||
return TRUE;
|
||
|
||
CoCreateInstance( MediaFormat::CLSID_CAVSVideoFormat, NULL, CLSCTX_ALL, MediaFormat::IID_IAVSVideoFormat, (void**)(&m_pFormat) );
|
||
|
||
if( m_pFormat )
|
||
{
|
||
m_pFormat->SetDefaultProperties();
|
||
m_pFormat->put_ColorSpace( CSP_BGRA /*| CSP_VFLIP*/ );
|
||
return TRUE;
|
||
}
|
||
|
||
return FALSE;
|
||
}
|
||
|
||
IMediaFrame* ConvertToBgra( IMediaFrame* pSource )
|
||
{
|
||
if( !pSource )
|
||
return NULL;
|
||
|
||
if( !CheckFormat() || !CheckTransform() )
|
||
return NULL;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
long lWidth; pSource->get_Width( &lWidth );
|
||
long lHeight; pSource->get_Height( &lHeight );
|
||
long lAspectX; pSource->get_AspectRatioX( &lAspectX );
|
||
long lAspectY; pSource->get_AspectRatioY( &lAspectY );
|
||
|
||
m_pFormat->put_Width( lWidth );
|
||
m_pFormat->put_Height( lHeight );
|
||
m_pFormat->put_AspectRatioX( lAspectX );
|
||
m_pFormat->put_AspectRatioY( lAspectY );
|
||
|
||
IUnknown* pResultInterface = NULL;
|
||
|
||
m_pTransform->SetVideoFormat( m_pFormat );
|
||
m_pTransform->TransformFrame( pSource, &pResultInterface );
|
||
|
||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
if (pSource == pResultInterface) // <20><><EFBFBD><EFBFBD><EFBFBD> (pResult != NULL)
|
||
{
|
||
pResultInterface->Release();
|
||
pResultInterface = NULL;
|
||
|
||
pSource->CreateDuplicate(DUBLICATE_TYPE_COPY, (MediaCore::IAVSMediaData**)(&pResultInterface));
|
||
}
|
||
|
||
if( !pResultInterface )
|
||
return NULL;
|
||
|
||
IMediaFrame* pResult = NULL;
|
||
pResultInterface->QueryInterface( MediaCore::IID_IAVSUncompressedVideoFrame, (void**)(&pResult) );
|
||
pResultInterface->Release();
|
||
|
||
if( !pResult )
|
||
return NULL;
|
||
|
||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> BGRA (<28>.<2E>. <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> alpha <20><><EFBFBD><EFBFBD><EFBFBD>), <20><> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 255
|
||
long lColorSpace; pSource->get_ColorSpace( &lColorSpace );
|
||
|
||
if( (lColorSpace & CSP_COLOR_MASK) != CSP_BGRA )
|
||
{
|
||
BYTE* pBuffer; pResult->get_Buffer( &pBuffer );
|
||
if( pBuffer )
|
||
{
|
||
long lSize = lWidth * lHeight;
|
||
long lExtra = lSize & 7;
|
||
|
||
lSize >>= 3;
|
||
|
||
BYTE* dst = pBuffer;
|
||
|
||
for( long i = 0; i < lSize; ++i, dst += 4 * 8 )
|
||
{
|
||
dst[ 3] = 255;
|
||
dst[ 7] = 255;
|
||
dst[11] = 255;
|
||
dst[15] = 255;
|
||
dst[19] = 255;
|
||
dst[23] = 255;
|
||
dst[27] = 255;
|
||
dst[31] = 255;
|
||
}
|
||
|
||
for( long i = 0; i < lExtra; ++i, dst += 4 )
|
||
{
|
||
dst[3] = 255;
|
||
}
|
||
}
|
||
}
|
||
|
||
return pResult;
|
||
}
|
||
|
||
};
|
||
|
||
|
||
class SerializedObjectTransformerPaintTextStatic
|
||
{
|
||
public:
|
||
|
||
SerializedObjectTransformerPaintTextStatic()
|
||
{
|
||
m_pTransformer = NULL;
|
||
m_bTransformerValid = TRUE;
|
||
}
|
||
virtual ~SerializedObjectTransformerPaintTextStatic()
|
||
{
|
||
Destroy();
|
||
}
|
||
|
||
BOOL IsValid()
|
||
{
|
||
if (NULL == m_pTransformer)
|
||
return FALSE;
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
BOOL Transform_SetBrush(ImageStudio::Serialize::Paint::TextStatic::SetBrush* pAction, double dTime)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
if (pAction->GetCompleteness(dTime) <= 0.0001)
|
||
return TRUE;
|
||
if (!Create())
|
||
return FALSE;
|
||
|
||
BSTR bstrPath = pAction->Brush.TexturePath.AllocSysString();
|
||
m_pTransformer->put_brushTexturePath(bstrPath); SysFreeString(bstrPath);
|
||
m_pTransformer->put_brushTextureAlpha(pAction->Brush.TextureAlpha);
|
||
m_pTransformer->put_brushTextureMode(pAction->Brush.TextureMode);
|
||
m_pTransformer->put_brushColor1(pAction->Brush.Color1);
|
||
m_pTransformer->put_brushColor2(pAction->Brush.Color2);
|
||
m_pTransformer->put_brushAlpha1(pAction->Brush.Alpha1);
|
||
m_pTransformer->put_brushAlpha2(pAction->Brush.Alpha2);
|
||
m_pTransformer->put_brushType(pAction->Brush.Type);
|
||
|
||
return TRUE;
|
||
}
|
||
BOOL Transform_SetFont(ImageStudio::Serialize::Paint::TextStatic::SetFont* pAction, double dTime)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
if (pAction->GetCompleteness(dTime) <= 0.0001)
|
||
return TRUE;
|
||
if (!Create())
|
||
return FALSE;
|
||
|
||
BSTR bstrName = pAction->Font.Name.AllocSysString();
|
||
m_pTransformer->put_fontName(bstrName); SysFreeString(bstrName);
|
||
m_pTransformer->put_fontSize(pAction->Font.Size);
|
||
m_pTransformer->put_fontBold(pAction->Font.Bold ? VARIANT_TRUE : VARIANT_FALSE);
|
||
m_pTransformer->put_fontItalic(pAction->Font.Italic ? VARIANT_TRUE : VARIANT_FALSE);
|
||
m_pTransformer->put_fontUnderline(pAction->Font.Underline ? VARIANT_TRUE : VARIANT_FALSE);
|
||
m_pTransformer->put_fontStrikeout(pAction->Font.Strikeout ? VARIANT_TRUE : VARIANT_FALSE);
|
||
|
||
return TRUE;
|
||
}
|
||
BOOL Transform_SetFormat(ImageStudio::Serialize::Paint::TextStatic::SetFormat* pAction, double dTime)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
if (pAction->GetCompleteness(dTime) <= 0.0001)
|
||
return TRUE;
|
||
if (!Create())
|
||
return FALSE;
|
||
|
||
m_pTransformer->put_formatRotate(pAction->Angle);
|
||
m_pTransformer->put_formatAlignVertical(pAction->Format.StringAlignmentVertical);
|
||
m_pTransformer->put_formatAlignHorizontal(pAction->Format.StringAlignmentHorizontal);
|
||
|
||
return TRUE;
|
||
}
|
||
BOOL Transform_SetShadow(ImageStudio::Serialize::Paint::TextStatic::SetShadow* pAction, double dTime)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
if (pAction->GetCompleteness(dTime) <= 0.0001)
|
||
return TRUE;
|
||
if (!Create())
|
||
return FALSE;
|
||
|
||
m_pTransformer->put_shadowVisible(pAction->Shadow.Visible ? VARIANT_TRUE : VARIANT_FALSE);
|
||
m_pTransformer->put_shadowDistanceX(int(pAction->Shadow.DistanceX));
|
||
m_pTransformer->put_shadowDistanceY(int(pAction->Shadow.DistanceY));
|
||
m_pTransformer->put_shadowColor(pAction->Shadow.Color);
|
||
m_pTransformer->put_shadowAlpha(pAction->Shadow.Alpha);
|
||
m_pTransformer->put_shadowBlur(int(pAction->Shadow.BlurSize));
|
||
|
||
return TRUE;
|
||
}
|
||
BOOL Transform_SetEdge(ImageStudio::Serialize::Paint::TextStatic::SetEdge* pAction, double dTime)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
if (pAction->GetCompleteness(dTime) <= 0.0001)
|
||
return TRUE;
|
||
if (!Create())
|
||
return FALSE;
|
||
|
||
m_pTransformer->put_edgeVisible(pAction->Edge.Visible ? VARIANT_TRUE : VARIANT_FALSE);
|
||
m_pTransformer->put_edgeDistance(int(pAction->Edge.Dist));
|
||
m_pTransformer->put_edgeColor(pAction->Edge.Color);
|
||
m_pTransformer->put_edgeAlpha(pAction->Edge.Alpha);
|
||
|
||
return TRUE;
|
||
}
|
||
BOOL Transform_DrawInRect(ImageStudio::Serialize::Paint::TextStatic::DrawInRect* pAction, double dTime, IUnknown* pSource, IUnknown*& pResult)
|
||
{
|
||
if (!pAction || !pSource)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(dTime);
|
||
if (dCompleteness <= 0.0001)
|
||
return Core::c_nErrorNone; //(Core::c_nErrorNone == ImageStudio::Transforms::Core::COM::COM_DulicateImage(pSource, pResult, TRUE));
|
||
|
||
if (!Create())
|
||
return FALSE;
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !GetMetricMultiplier( pSource, pAction->Metric, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
pResult = pSource;
|
||
|
||
BSTR bstrText = pAction->Text.AllocSysString();
|
||
|
||
// font
|
||
if (TRUE)
|
||
{
|
||
if (pAction->Font.IsValidName())
|
||
{
|
||
BSTR bstrName = pAction->Font.GetName().AllocSysString();
|
||
m_pTransformer->put_fontName(bstrName);
|
||
SysFreeString(bstrName);
|
||
}
|
||
|
||
if (pAction->Font.IsValidSize()) m_pTransformer->put_fontSize(pAction->Font.GetSize());
|
||
if (pAction->Font.IsValidBold()) m_pTransformer->put_fontBold(pAction->Font.GetBold() ? VARIANT_TRUE : VARIANT_FALSE);
|
||
if (pAction->Font.IsValidItalic()) m_pTransformer->put_fontItalic(pAction->Font.GetItalic() ? VARIANT_TRUE : VARIANT_FALSE);
|
||
if (pAction->Font.IsValidUnderline()) m_pTransformer->put_fontUnderline(pAction->Font.GetUnderline() ? VARIANT_TRUE : VARIANT_FALSE);
|
||
if (pAction->Font.IsValidStrikeout()) m_pTransformer->put_fontStrikeout(pAction->Font.GetStrikeout() ? VARIANT_TRUE : VARIANT_FALSE);
|
||
if (pAction->Font.IsValidStringAlignmentVertical()) m_pTransformer->put_formatAlignVertical(pAction->Font.GetStringAlignmentVertical());
|
||
if (pAction->Font.IsValidStringAlignmentHorizontal()) m_pTransformer->put_formatAlignHorizontal(pAction->Font.GetStringAlignmentHorizontal());
|
||
if (pAction->Font.IsValidAngle()) m_pTransformer->put_formatRotate((long)pAction->Font.GetAngle());
|
||
}
|
||
|
||
// brush
|
||
if (TRUE)
|
||
{
|
||
if (pAction->Brush.IsValidTexturePath())
|
||
{
|
||
BSTR bstrPath = pAction->Brush.GetTexturePath().AllocSysString();
|
||
m_pTransformer->put_brushTexturePath(bstrPath);
|
||
SysFreeString(bstrPath);
|
||
}
|
||
|
||
if (pAction->Brush.IsValidTextureAlpha()) m_pTransformer->put_brushTextureAlpha(pAction->Brush.GetTextureAlpha());
|
||
if (pAction->Brush.IsValidTextureMode()) m_pTransformer->put_brushTextureMode(pAction->Brush.GetTextureMode());
|
||
if (pAction->Brush.IsValidColor1()) m_pTransformer->put_brushColor1(pAction->Brush.GetColor1());
|
||
if (pAction->Brush.IsValidColor2()) m_pTransformer->put_brushColor2(pAction->Brush.GetColor2());
|
||
if (pAction->Brush.IsValidAlpha1()) m_pTransformer->put_brushAlpha1(pAction->Brush.GetAlpha1());
|
||
if (pAction->Brush.IsValidAlpha2()) m_pTransformer->put_brushAlpha2(pAction->Brush.GetAlpha2());
|
||
if (pAction->Brush.IsValidType()) m_pTransformer->put_brushType(pAction->Brush.GetType());
|
||
}
|
||
|
||
// shadow
|
||
if (TRUE)
|
||
{
|
||
if (pAction->Shadow.IsValidVisible()) m_pTransformer->put_shadowVisible(pAction->Shadow.GetVisible() ? VARIANT_TRUE : VARIANT_FALSE);
|
||
if (pAction->Shadow.IsValidDistanceX()) m_pTransformer->put_shadowDistanceX(long(pAction->Shadow.GetDistanceX()));
|
||
if (pAction->Shadow.IsValidDistanceY()) m_pTransformer->put_shadowDistanceY(long(pAction->Shadow.GetDistanceY()));
|
||
if (pAction->Shadow.IsValidBlurSize()) m_pTransformer->put_shadowBlur(long(pAction->Shadow.GetBlurSize()));
|
||
if (pAction->Shadow.IsValidColor()) m_pTransformer->put_shadowColor(pAction->Shadow.GetColor());
|
||
if (pAction->Shadow.IsValidAlpha()) m_pTransformer->put_shadowAlpha(pAction->Shadow.GetAlpha());
|
||
}
|
||
|
||
// edge
|
||
if (TRUE)
|
||
{
|
||
if (pAction->Edge.IsValidVisible()) m_pTransformer->put_edgeVisible(pAction->Edge.GetVisible() ? VARIANT_TRUE : VARIANT_FALSE);
|
||
if (pAction->Edge.IsValidDist()) m_pTransformer->put_edgeDistance(long(pAction->Edge.GetDist()));
|
||
if (pAction->Edge.IsValidColor()) m_pTransformer->put_edgeColor(pAction->Edge.GetColor());
|
||
if (pAction->Edge.IsValidAlpha()) m_pTransformer->put_edgeAlpha(pAction->Edge.GetAlpha());
|
||
}
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> completeness <20><> 1
|
||
long nBrushAlpha1 = 0; m_pTransformer->get_brushAlpha1(&nBrushAlpha1);
|
||
long nBrushAlpha2 = 0; m_pTransformer->get_brushAlpha2(&nBrushAlpha2);
|
||
long nTextureAlpha = 0; m_pTransformer->get_brushTextureAlpha(&nTextureAlpha);
|
||
long nShadowAlpha = 0; m_pTransformer->get_shadowAlpha(&nShadowAlpha);
|
||
long nEdgeAlpha = 0; m_pTransformer->get_edgeAlpha(&nEdgeAlpha);
|
||
double dFontSize = 0; m_pTransformer->get_fontSize(&dFontSize);
|
||
|
||
m_pTransformer->put_brushAlpha1((long)(dCompleteness*nBrushAlpha1));
|
||
m_pTransformer->put_brushAlpha2((long)(dCompleteness*nBrushAlpha2));
|
||
m_pTransformer->put_brushTextureAlpha((long)(dCompleteness*nTextureAlpha));
|
||
m_pTransformer->put_shadowAlpha((long)(dCompleteness*nShadowAlpha));
|
||
m_pTransformer->put_edgeAlpha((long)(dCompleteness*nEdgeAlpha));
|
||
|
||
// <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
double dLeft = pAction->Left * dMetricX;
|
||
double dRight = pAction->Right * dMetricX;
|
||
double dTop = pAction->Top * dMetricY;
|
||
double dBottom = pAction->Bottom * dMetricY;
|
||
|
||
double dNewFontSize = dFontSize * dMetricX;
|
||
|
||
dLeft += dLeft > 0 ? 0.5 : -0.5;
|
||
dTop += dTop > 0 ? 0.5 : -0.5;
|
||
dRight += dRight > 0 ? 0.5 : -0.5;
|
||
dBottom += dBottom > 0 ? 0.5 : -0.5;
|
||
|
||
m_pTransformer->put_fontSize( dNewFontSize );
|
||
m_pTransformer->DrawMedia( &pResult, bstrText, long(dLeft), long(dTop), long(dRight), long(dBottom) );
|
||
m_pTransformer->put_fontSize( dFontSize );
|
||
|
||
// TODO: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
pSource->Release();
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> alpha
|
||
m_pTransformer->put_brushAlpha1(nBrushAlpha1);
|
||
m_pTransformer->put_brushAlpha2(nBrushAlpha2);
|
||
m_pTransformer->put_brushTextureAlpha(nTextureAlpha);
|
||
m_pTransformer->put_shadowAlpha(nShadowAlpha);
|
||
m_pTransformer->put_edgeAlpha(nEdgeAlpha);
|
||
|
||
SysFreeString(bstrText);
|
||
|
||
return TRUE;
|
||
}
|
||
BOOL Transform_DrawOnEllipse(ImageStudio::Serialize::Paint::TextStatic::DrawOnEllipse* pAction, double dTime, IUnknown* pSource, IUnknown*& pResult)
|
||
{
|
||
if (!pAction || !pSource)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(dTime);
|
||
if (dCompleteness <= 0.0001)
|
||
return (Core::c_nErrorNone == ImageStudio::Transforms::Core::COM::COM_DulicateImage(pSource, pResult, TRUE));
|
||
|
||
if (!Create())
|
||
return FALSE;
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !GetMetricMultiplier( pSource, pAction->Metric, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
pResult = pSource;
|
||
|
||
BSTR bstrText = pAction->Text.AllocSysString();
|
||
|
||
// font
|
||
if (TRUE)
|
||
{
|
||
if (pAction->Font.IsValidName())
|
||
{
|
||
BSTR bstrName = pAction->Font.GetName().AllocSysString();
|
||
m_pTransformer->put_fontName(bstrName);
|
||
SysFreeString(bstrName);
|
||
}
|
||
|
||
if (pAction->Font.IsValidSize()) m_pTransformer->put_fontSize(pAction->Font.GetSize());
|
||
if (pAction->Font.IsValidBold()) m_pTransformer->put_fontBold(pAction->Font.GetBold() ? VARIANT_TRUE : VARIANT_FALSE);
|
||
if (pAction->Font.IsValidItalic()) m_pTransformer->put_fontItalic(pAction->Font.GetItalic() ? VARIANT_TRUE : VARIANT_FALSE);
|
||
if (pAction->Font.IsValidUnderline()) m_pTransformer->put_fontUnderline(pAction->Font.GetUnderline() ? VARIANT_TRUE : VARIANT_FALSE);
|
||
if (pAction->Font.IsValidStrikeout()) m_pTransformer->put_fontStrikeout(pAction->Font.GetStrikeout() ? VARIANT_TRUE : VARIANT_FALSE);
|
||
if (pAction->Font.IsValidStringAlignmentVertical()) m_pTransformer->put_formatAlignVertical(pAction->Font.GetStringAlignmentVertical());
|
||
if (pAction->Font.IsValidStringAlignmentHorizontal()) m_pTransformer->put_formatAlignHorizontal(pAction->Font.GetStringAlignmentHorizontal());
|
||
if (pAction->Font.IsValidAngle()) m_pTransformer->put_formatRotate((long)pAction->Font.GetAngle());
|
||
}
|
||
|
||
// brush
|
||
if (TRUE)
|
||
{
|
||
if (pAction->Brush.IsValidTexturePath())
|
||
{
|
||
BSTR bstrPath = pAction->Brush.GetTexturePath().AllocSysString();
|
||
m_pTransformer->put_brushTexturePath(bstrPath);
|
||
SysFreeString(bstrPath);
|
||
}
|
||
|
||
if (pAction->Brush.IsValidTextureAlpha()) m_pTransformer->put_brushTextureAlpha(pAction->Brush.GetTextureAlpha());
|
||
if (pAction->Brush.IsValidTextureMode()) m_pTransformer->put_brushTextureMode(pAction->Brush.GetTextureMode());
|
||
if (pAction->Brush.IsValidColor1()) m_pTransformer->put_brushColor1(pAction->Brush.GetColor1());
|
||
if (pAction->Brush.IsValidColor2()) m_pTransformer->put_brushColor2(pAction->Brush.GetColor2());
|
||
if (pAction->Brush.IsValidAlpha1()) m_pTransformer->put_brushAlpha1(pAction->Brush.GetAlpha1());
|
||
if (pAction->Brush.IsValidAlpha2()) m_pTransformer->put_brushAlpha2(pAction->Brush.GetAlpha2());
|
||
if (pAction->Brush.IsValidType()) m_pTransformer->put_brushType(pAction->Brush.GetType());
|
||
}
|
||
|
||
// shadow
|
||
if (TRUE)
|
||
{
|
||
if (pAction->Shadow.IsValidVisible()) m_pTransformer->put_shadowVisible(pAction->Shadow.GetVisible() ? VARIANT_TRUE : VARIANT_FALSE);
|
||
if (pAction->Shadow.IsValidDistanceX()) m_pTransformer->put_shadowDistanceX(long(pAction->Shadow.GetDistanceX()));
|
||
if (pAction->Shadow.IsValidDistanceY()) m_pTransformer->put_shadowDistanceY(long(pAction->Shadow.GetDistanceY()));
|
||
if (pAction->Shadow.IsValidBlurSize()) m_pTransformer->put_shadowBlur(long(pAction->Shadow.GetBlurSize()));
|
||
if (pAction->Shadow.IsValidColor()) m_pTransformer->put_shadowColor(pAction->Shadow.GetColor());
|
||
if (pAction->Shadow.IsValidAlpha()) m_pTransformer->put_shadowAlpha(pAction->Shadow.GetAlpha());
|
||
}
|
||
|
||
// edge
|
||
if (TRUE)
|
||
{
|
||
if (pAction->Edge.IsValidVisible()) m_pTransformer->put_edgeVisible(pAction->Edge.GetVisible() ? VARIANT_TRUE : VARIANT_FALSE);
|
||
if (pAction->Edge.IsValidDist()) m_pTransformer->put_edgeDistance(long(pAction->Edge.GetDist()));
|
||
if (pAction->Edge.IsValidColor()) m_pTransformer->put_edgeColor(pAction->Edge.GetColor());
|
||
if (pAction->Edge.IsValidAlpha()) m_pTransformer->put_edgeAlpha(pAction->Edge.GetAlpha());
|
||
}
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> completeness <20><> 1
|
||
long nBrushAlpha1 = 0; m_pTransformer->get_brushAlpha1(&nBrushAlpha1);
|
||
long nBrushAlpha2 = 0; m_pTransformer->get_brushAlpha2(&nBrushAlpha2);
|
||
long nTextureAlpha = 0; m_pTransformer->get_brushTextureAlpha(&nTextureAlpha);
|
||
long nShadowAlpha = 0; m_pTransformer->get_shadowAlpha(&nShadowAlpha);
|
||
long nEdgeAlpha = 0; m_pTransformer->get_edgeAlpha(&nEdgeAlpha);
|
||
double dFontSize = 0; m_pTransformer->get_fontSize(&dFontSize);
|
||
|
||
m_pTransformer->put_brushAlpha1((long)(dCompleteness*nBrushAlpha1));
|
||
m_pTransformer->put_brushAlpha2((long)(dCompleteness*nBrushAlpha2));
|
||
m_pTransformer->put_brushTextureAlpha((long)(dCompleteness*nTextureAlpha));
|
||
m_pTransformer->put_shadowAlpha((long)(dCompleteness*nShadowAlpha));
|
||
m_pTransformer->put_edgeAlpha((long)(dCompleteness*nEdgeAlpha));
|
||
|
||
// <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
double dLeft = pAction->Left * dMetricX;
|
||
double dRight = pAction->Right * dMetricX;
|
||
double dTop = pAction->Top * dMetricY;
|
||
double dBottom = pAction->Bottom * dMetricY;
|
||
double dNewFontSize = dFontSize * dMetricX;
|
||
double dStartAngle = pAction->StartAngle;
|
||
double dSweepAngle = pAction->SweepAngle;
|
||
|
||
dLeft += dLeft > 0 ? 0.5 : -0.5;
|
||
dTop += dTop > 0 ? 0.5 : -0.5;
|
||
dRight += dRight > 0 ? 0.5 : -0.5;
|
||
dBottom += dBottom > 0 ? 0.5 : -0.5;
|
||
|
||
m_pTransformer->put_fontSize( dNewFontSize );
|
||
m_pTransformer->DrawMediaEllipse( &pResult, bstrText, long(dLeft), long(dTop), long(dRight), long(dBottom), dStartAngle, dSweepAngle );
|
||
m_pTransformer->put_fontSize( dFontSize );
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> alpha
|
||
m_pTransformer->put_brushAlpha1(nBrushAlpha1);
|
||
m_pTransformer->put_brushAlpha2(nBrushAlpha2);
|
||
m_pTransformer->put_brushTextureAlpha(nTextureAlpha);
|
||
m_pTransformer->put_shadowAlpha(nShadowAlpha);
|
||
m_pTransformer->put_edgeAlpha(nEdgeAlpha);
|
||
|
||
SysFreeString(bstrText);
|
||
|
||
return TRUE;
|
||
}
|
||
BOOL Transform_DrawOnPolyline(ImageStudio::Serialize::Paint::TextStatic::DrawOnPolyline* pAction, double dTime, IUnknown* pSource, IUnknown*& pResult)
|
||
{
|
||
if (!pAction || !pSource)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(dTime);
|
||
int nNumPoints = pAction->Points.GetSize();
|
||
if (dCompleteness <= 0.0001 || nNumPoints < 2)
|
||
return (Core::c_nErrorNone == ImageStudio::Transforms::Core::COM::COM_DulicateImage(pSource, pResult, TRUE));
|
||
|
||
if (!Create())
|
||
return FALSE;
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !GetMetricMultiplier( pSource, pAction->Metric, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
pResult = pSource;
|
||
|
||
BSTR bstrText = pAction->Text.AllocSysString();
|
||
nNumPoints &= ~1;
|
||
|
||
SAFEARRAYBOUND oSafeArrayBounds;
|
||
oSafeArrayBounds.lLbound = 0;
|
||
oSafeArrayBounds.cElements = nNumPoints;
|
||
|
||
SAFEARRAY* pSafeArray = SafeArrayCreate(VT_R8, 1, &oSafeArrayBounds);
|
||
|
||
double* pDstPoints = (double*)(pSafeArray->pvData);
|
||
double* pSrcPoints = (double*)(pAction->Points.GetData());
|
||
|
||
for (int nPoint = 0; nPoint < nNumPoints; nPoint += 2)
|
||
{
|
||
pDstPoints[nPoint] = dMetricX * pSrcPoints[nPoint];
|
||
pDstPoints[nPoint + 1] = dMetricY * pSrcPoints[nPoint + 1];
|
||
}
|
||
|
||
// font
|
||
if (TRUE)
|
||
{
|
||
if (pAction->Font.IsValidName())
|
||
{
|
||
BSTR bstrName = pAction->Font.GetName().AllocSysString();
|
||
m_pTransformer->put_fontName(bstrName);
|
||
SysFreeString(bstrName);
|
||
}
|
||
|
||
if (pAction->Font.IsValidSize()) m_pTransformer->put_fontSize(pAction->Font.GetSize());
|
||
if (pAction->Font.IsValidBold()) m_pTransformer->put_fontBold(pAction->Font.GetBold() ? VARIANT_TRUE : VARIANT_FALSE);
|
||
if (pAction->Font.IsValidItalic()) m_pTransformer->put_fontItalic(pAction->Font.GetItalic() ? VARIANT_TRUE : VARIANT_FALSE);
|
||
if (pAction->Font.IsValidUnderline()) m_pTransformer->put_fontUnderline(pAction->Font.GetUnderline() ? VARIANT_TRUE : VARIANT_FALSE);
|
||
if (pAction->Font.IsValidStrikeout()) m_pTransformer->put_fontStrikeout(pAction->Font.GetStrikeout() ? VARIANT_TRUE : VARIANT_FALSE);
|
||
if (pAction->Font.IsValidStringAlignmentVertical()) m_pTransformer->put_formatAlignVertical(pAction->Font.GetStringAlignmentVertical());
|
||
if (pAction->Font.IsValidStringAlignmentHorizontal()) m_pTransformer->put_formatAlignHorizontal(pAction->Font.GetStringAlignmentHorizontal());
|
||
if (pAction->Font.IsValidAngle()) m_pTransformer->put_formatRotate((long)pAction->Font.GetAngle());
|
||
}
|
||
|
||
// brush
|
||
if (TRUE)
|
||
{
|
||
if (pAction->Brush.IsValidTexturePath())
|
||
{
|
||
BSTR bstrPath = pAction->Brush.GetTexturePath().AllocSysString();
|
||
m_pTransformer->put_brushTexturePath(bstrPath);
|
||
SysFreeString(bstrPath);
|
||
}
|
||
|
||
if (pAction->Brush.IsValidTextureAlpha()) m_pTransformer->put_brushTextureAlpha(pAction->Brush.GetTextureAlpha());
|
||
if (pAction->Brush.IsValidTextureMode()) m_pTransformer->put_brushTextureMode(pAction->Brush.GetTextureMode());
|
||
if (pAction->Brush.IsValidColor1()) m_pTransformer->put_brushColor1(pAction->Brush.GetColor1());
|
||
if (pAction->Brush.IsValidColor2()) m_pTransformer->put_brushColor2(pAction->Brush.GetColor2());
|
||
if (pAction->Brush.IsValidAlpha1()) m_pTransformer->put_brushAlpha1(pAction->Brush.GetAlpha1());
|
||
if (pAction->Brush.IsValidAlpha2()) m_pTransformer->put_brushAlpha2(pAction->Brush.GetAlpha2());
|
||
if (pAction->Brush.IsValidType()) m_pTransformer->put_brushType(pAction->Brush.GetType());
|
||
}
|
||
|
||
// shadow
|
||
if (TRUE)
|
||
{
|
||
if (pAction->Shadow.IsValidVisible()) m_pTransformer->put_shadowVisible(pAction->Shadow.GetVisible() ? VARIANT_TRUE : VARIANT_FALSE);
|
||
if (pAction->Shadow.IsValidDistanceX()) m_pTransformer->put_shadowDistanceX(long(pAction->Shadow.GetDistanceX()));
|
||
if (pAction->Shadow.IsValidDistanceY()) m_pTransformer->put_shadowDistanceY(long(pAction->Shadow.GetDistanceY()));
|
||
if (pAction->Shadow.IsValidBlurSize()) m_pTransformer->put_shadowBlur(long(pAction->Shadow.GetBlurSize()));
|
||
if (pAction->Shadow.IsValidColor()) m_pTransformer->put_shadowColor(pAction->Shadow.GetColor());
|
||
if (pAction->Shadow.IsValidAlpha()) m_pTransformer->put_shadowAlpha(pAction->Shadow.GetAlpha());
|
||
}
|
||
|
||
// edge
|
||
if (TRUE)
|
||
{
|
||
if (pAction->Edge.IsValidVisible()) m_pTransformer->put_edgeVisible(pAction->Edge.GetVisible() ? VARIANT_TRUE : VARIANT_FALSE);
|
||
if (pAction->Edge.IsValidDist()) m_pTransformer->put_edgeDistance(long(pAction->Edge.GetDist()));
|
||
if (pAction->Edge.IsValidColor()) m_pTransformer->put_edgeColor(pAction->Edge.GetColor());
|
||
if (pAction->Edge.IsValidAlpha()) m_pTransformer->put_edgeAlpha(pAction->Edge.GetAlpha());
|
||
}
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> completeness <20><> 1
|
||
long nBrushAlpha1 = 0; m_pTransformer->get_brushAlpha1(&nBrushAlpha1);
|
||
long nBrushAlpha2 = 0; m_pTransformer->get_brushAlpha2(&nBrushAlpha2);
|
||
long nTextureAlpha = 0; m_pTransformer->get_brushTextureAlpha(&nTextureAlpha);
|
||
long nShadowAlpha = 0; m_pTransformer->get_shadowAlpha(&nShadowAlpha);
|
||
long nEdgeAlpha = 0; m_pTransformer->get_edgeAlpha(&nEdgeAlpha);
|
||
double dFontSize = 0; m_pTransformer->get_fontSize(&dFontSize);
|
||
|
||
m_pTransformer->put_brushAlpha1((long)(dCompleteness*nBrushAlpha1));
|
||
m_pTransformer->put_brushAlpha2((long)(dCompleteness*nBrushAlpha2));
|
||
m_pTransformer->put_brushTextureAlpha((long)(dCompleteness*nTextureAlpha));
|
||
m_pTransformer->put_shadowAlpha((long)(dCompleteness*nShadowAlpha));
|
||
m_pTransformer->put_edgeAlpha((long)(dCompleteness*nEdgeAlpha));
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||
m_pTransformer->DrawMediaPolyline(&pResult, &pSafeArray, bstrText);
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> alpha
|
||
m_pTransformer->put_brushAlpha1(nBrushAlpha1);
|
||
m_pTransformer->put_brushAlpha2(nBrushAlpha2);
|
||
m_pTransformer->put_brushTextureAlpha(nTextureAlpha);
|
||
m_pTransformer->put_shadowAlpha(nShadowAlpha);
|
||
m_pTransformer->put_edgeAlpha(nEdgeAlpha);
|
||
|
||
SafeArrayDestroy(pSafeArray);
|
||
|
||
SysFreeString(bstrText);
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
protected:
|
||
|
||
void Destroy()
|
||
{
|
||
if (NULL != m_pTransformer)
|
||
m_pTransformer->Release();
|
||
|
||
m_pTransformer = NULL;
|
||
}
|
||
BOOL Create()
|
||
{
|
||
if (NULL != m_pTransformer)
|
||
return TRUE;
|
||
if (!m_bTransformerValid)
|
||
return FALSE;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
if (S_OK != CoCreateInstance(ImagePaint::CLSID_ImageTextStatic3, NULL, CLSCTX_ALL, ImagePaint::IID_IImageTextStatic3, (void**)&m_pTransformer))
|
||
{
|
||
m_pTransformer = NULL;
|
||
m_bTransformerValid = FALSE;
|
||
}
|
||
|
||
return IsValid();
|
||
}
|
||
|
||
protected:
|
||
|
||
ImagePaint::IImageTextStatic3* m_pTransformer; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
BOOL m_bTransformerValid; // <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD>
|
||
};
|
||
class SerializedObjectTransformerPaintTextDynamic
|
||
{
|
||
public:
|
||
|
||
SerializedObjectTransformerPaintTextDynamic()
|
||
{
|
||
m_pTransformer = NULL;
|
||
m_bTransformerValid = TRUE;
|
||
}
|
||
virtual ~SerializedObjectTransformerPaintTextDynamic()
|
||
{
|
||
Destroy();
|
||
}
|
||
|
||
BOOL IsValid()
|
||
{
|
||
if (NULL == m_pTransformer)
|
||
return FALSE;
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
BOOL Transform_SetBrush(ImageStudio::Serialize::Paint::TextDynamic::SetBrush* pAction, double dTime)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
if (pAction->GetCompleteness(dTime) <= 0.0001)
|
||
return TRUE;
|
||
if (!Create())
|
||
return FALSE;
|
||
|
||
BSTR bstrPath = pAction->Brush.TexturePath.AllocSysString();
|
||
m_pTransformer->put_brushTextureLoad(bstrPath); SysFreeString(bstrPath);
|
||
m_pTransformer->put_brushTextureAlpha((BYTE)pAction->Brush.TextureAlpha);
|
||
m_pTransformer->put_brushTextureMode(pAction->Brush.TextureMode);
|
||
m_pTransformer->put_brushColor1(pAction->Brush.Color1);
|
||
m_pTransformer->put_brushColor2(pAction->Brush.Color2);
|
||
m_pTransformer->put_brushAlpha1((BYTE)pAction->Brush.Alpha1);
|
||
m_pTransformer->put_brushAlpha2((BYTE)pAction->Brush.Alpha2);
|
||
m_pTransformer->put_brushType(pAction->Brush.Type);
|
||
|
||
return TRUE;
|
||
}
|
||
BOOL Transform_SetFont(ImageStudio::Serialize::Paint::TextDynamic::SetFont* pAction, double dTime)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
if (pAction->GetCompleteness(dTime) <= 0.0001)
|
||
return TRUE;
|
||
if (!Create())
|
||
return FALSE;
|
||
|
||
BSTR bstrName = pAction->Font.Name.AllocSysString();
|
||
m_pTransformer->put_fontName(bstrName); SysFreeString(bstrName);
|
||
m_pTransformer->put_fontSize((long)pAction->Font.Size);
|
||
m_pTransformer->put_fontBold(pAction->Font.Bold ? VARIANT_TRUE : VARIANT_FALSE);
|
||
m_pTransformer->put_fontItalic(pAction->Font.Italic ? VARIANT_TRUE : VARIANT_FALSE);
|
||
m_pTransformer->put_fontUnderline(pAction->Font.Underline ? VARIANT_TRUE : VARIANT_FALSE);
|
||
m_pTransformer->put_fontStrikeout(pAction->Font.Strikeout ? VARIANT_TRUE : VARIANT_FALSE);
|
||
|
||
return TRUE;
|
||
}
|
||
BOOL Transform_SetShadow(ImageStudio::Serialize::Paint::TextDynamic::SetShadow* pAction, double dTime)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
if (pAction->GetCompleteness(dTime) <= 0.0001)
|
||
return TRUE;
|
||
if (!Create())
|
||
return FALSE;
|
||
|
||
m_pTransformer->put_shadowVisible(pAction->Shadow.Visible ? VARIANT_TRUE : VARIANT_FALSE);
|
||
m_pTransformer->put_shadowDistanceX(int(pAction->Shadow.DistanceX));
|
||
m_pTransformer->put_shadowDistanceY(int(pAction->Shadow.DistanceY));
|
||
m_pTransformer->put_shadowColor(pAction->Shadow.Color);
|
||
m_pTransformer->put_shadowAlpha((BYTE)pAction->Shadow.Alpha);
|
||
m_pTransformer->put_shadowBlur(int(pAction->Shadow.BlurSize));
|
||
|
||
return TRUE;
|
||
}
|
||
BOOL Transform_SetEdge(ImageStudio::Serialize::Paint::TextDynamic::SetEdge* pAction, double dTime)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
if (pAction->GetCompleteness(dTime) <= 0.0001)
|
||
return TRUE;
|
||
if (!Create())
|
||
return FALSE;
|
||
|
||
m_pTransformer->put_edgeVisible(pAction->Edge.Visible ? VARIANT_TRUE : VARIANT_FALSE);
|
||
m_pTransformer->put_edgeDistance(int(pAction->Edge.Dist));
|
||
m_pTransformer->put_edgeColor(pAction->Edge.Color);
|
||
m_pTransformer->put_edgeAlpha((BYTE)pAction->Edge.Alpha);
|
||
|
||
return TRUE;
|
||
}
|
||
BOOL Transform_Start(ImageStudio::Serialize::Paint::TextDynamic::Start* pAction, double dTime, IUnknown* pSource)
|
||
{
|
||
if (!pAction || !pSource)
|
||
return FALSE;
|
||
if (pAction->GetCompleteness(dTime) <= 0.0001)
|
||
return TRUE;
|
||
if (!Create())
|
||
return FALSE;
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !GetMetricMultiplier( pSource, pAction->Metric, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
BSTR bstrText = pAction->Text.AllocSysString();
|
||
|
||
m_pTransformer->put_formatRotate(pAction->Angle);
|
||
|
||
// <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
double dDiagonal = sqrt( dMetricX * dMetricX + dMetricY * dMetricY );
|
||
double dX = pAction->X * dMetricX;
|
||
double dY = pAction->Y * dMetricY;
|
||
double dStep = pAction->Step * dDiagonal;
|
||
|
||
dX += dX > 0 ? 0.5 : -0.5;
|
||
dY += dY > 0 ? 0.5 : -0.5;
|
||
|
||
int nCategory = pAction->Category;
|
||
int nEffect = pAction->Effect;
|
||
int nEffectID = pAction->EffectID;
|
||
|
||
m_pTransformer->Start( bstrText, nCategory, nEffect, nEffectID, long(dX), long(dY), long(dStep) );
|
||
|
||
SysFreeString(bstrText);
|
||
|
||
return TRUE;
|
||
}
|
||
BOOL Transform_Stop(ImageStudio::Serialize::Paint::TextDynamic::Stop* pAction, double dTime)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
if (pAction->GetCompleteness(dTime) <= 0.0001)
|
||
return TRUE;
|
||
if (!Create())
|
||
return FALSE;
|
||
|
||
m_pTransformer->Stop();
|
||
|
||
return TRUE;
|
||
}
|
||
BOOL Transform_Render(ImageStudio::Serialize::Paint::TextDynamic::Render* pAction, double dTime, IUnknown* pSource, IUnknown*& pResult)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(dTime);
|
||
if (dCompleteness <= 0.0001)
|
||
return (Core::c_nErrorNone == ImageStudio::Transforms::Core::COM::COM_DulicateImage(pSource, pResult, TRUE));
|
||
|
||
if (!Create())
|
||
return FALSE;
|
||
|
||
// font
|
||
if (TRUE)
|
||
{
|
||
if (pAction->Font.IsValidName())
|
||
{
|
||
BSTR bstrName = pAction->Font.GetName().AllocSysString();
|
||
m_pTransformer->put_fontName(bstrName);
|
||
SysFreeString(bstrName);
|
||
}
|
||
|
||
if (pAction->Font.IsValidSize()) m_pTransformer->put_fontSize((int)pAction->Font.GetSize());
|
||
if (pAction->Font.IsValidBold()) m_pTransformer->put_fontBold(pAction->Font.GetBold() ? VARIANT_TRUE : VARIANT_FALSE);
|
||
if (pAction->Font.IsValidItalic()) m_pTransformer->put_fontItalic(pAction->Font.GetItalic() ? VARIANT_TRUE : VARIANT_FALSE);
|
||
if (pAction->Font.IsValidUnderline()) m_pTransformer->put_fontUnderline(pAction->Font.GetUnderline() ? VARIANT_TRUE : VARIANT_FALSE);
|
||
if (pAction->Font.IsValidStrikeout()) m_pTransformer->put_fontStrikeout(pAction->Font.GetStrikeout() ? VARIANT_TRUE : VARIANT_FALSE);
|
||
}
|
||
|
||
// brush
|
||
if (TRUE)
|
||
{
|
||
if (pAction->Brush.IsValidTexturePath())
|
||
{
|
||
BSTR bstrPath = pAction->Brush.GetTexturePath().AllocSysString();
|
||
m_pTransformer->put_brushTextureLoad(bstrPath);
|
||
SysFreeString(bstrPath);
|
||
}
|
||
|
||
if (pAction->Brush.IsValidTextureAlpha()) m_pTransformer->put_brushTextureAlpha(pAction->Brush.GetTextureAlpha());
|
||
if (pAction->Brush.IsValidTextureMode()) m_pTransformer->put_brushTextureMode(pAction->Brush.GetTextureMode());
|
||
if (pAction->Brush.IsValidColor1()) m_pTransformer->put_brushColor1(pAction->Brush.GetColor1());
|
||
if (pAction->Brush.IsValidColor2()) m_pTransformer->put_brushColor2(pAction->Brush.GetColor2());
|
||
if (pAction->Brush.IsValidAlpha1()) m_pTransformer->put_brushAlpha1(pAction->Brush.GetAlpha1());
|
||
if (pAction->Brush.IsValidAlpha2()) m_pTransformer->put_brushAlpha2(pAction->Brush.GetAlpha2());
|
||
if (pAction->Brush.IsValidType()) m_pTransformer->put_brushType(pAction->Brush.GetType());
|
||
}
|
||
|
||
// shadow
|
||
if (TRUE)
|
||
{
|
||
if (pAction->Shadow.IsValidVisible()) m_pTransformer->put_shadowVisible(pAction->Shadow.GetVisible() ? VARIANT_TRUE : VARIANT_FALSE);
|
||
if (pAction->Shadow.IsValidDistanceX()) m_pTransformer->put_shadowDistanceX(long(pAction->Shadow.GetDistanceX()));
|
||
if (pAction->Shadow.IsValidDistanceY()) m_pTransformer->put_shadowDistanceY(long(pAction->Shadow.GetDistanceY()));
|
||
if (pAction->Shadow.IsValidBlurSize()) m_pTransformer->put_shadowBlur(long(pAction->Shadow.GetBlurSize()));
|
||
if (pAction->Shadow.IsValidColor()) m_pTransformer->put_shadowColor(pAction->Shadow.GetColor());
|
||
if (pAction->Shadow.IsValidAlpha()) m_pTransformer->put_shadowAlpha(pAction->Shadow.GetAlpha());
|
||
}
|
||
|
||
// edge
|
||
if (TRUE)
|
||
{
|
||
if (pAction->Edge.IsValidVisible()) m_pTransformer->put_edgeVisible(pAction->Edge.GetVisible() ? VARIANT_TRUE : VARIANT_FALSE);
|
||
if (pAction->Edge.IsValidDist()) m_pTransformer->put_edgeDistance(long(pAction->Edge.GetDist()));
|
||
if (pAction->Edge.IsValidColor()) m_pTransformer->put_edgeColor(pAction->Edge.GetColor());
|
||
if (pAction->Edge.IsValidAlpha()) m_pTransformer->put_edgeAlpha(pAction->Edge.GetAlpha());
|
||
}
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||
m_pTransformer->RenderMedia(pSource, &pResult, dCompleteness);
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
protected:
|
||
|
||
void Destroy()
|
||
{
|
||
if (NULL != m_pTransformer)
|
||
m_pTransformer->Release();
|
||
|
||
m_pTransformer = NULL;
|
||
}
|
||
BOOL Create()
|
||
{
|
||
if (NULL != m_pTransformer)
|
||
return TRUE;
|
||
if (!m_bTransformerValid)
|
||
return FALSE;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
if (S_OK != CoCreateInstance(ImagePaint::CLSID_ImageTextDynamic3, NULL, CLSCTX_ALL, ImagePaint::IID_IImageTextDynamic3, (void**)&m_pTransformer))
|
||
{
|
||
m_pTransformer = NULL;
|
||
m_bTransformerValid = FALSE;
|
||
}
|
||
|
||
return IsValid();
|
||
}
|
||
|
||
protected:
|
||
|
||
ImagePaint::IImageTextDynamic3* m_pTransformer; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
BOOL m_bTransformerValid; // <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD>
|
||
};
|
||
|
||
class SerializedObjectTransformerEvents
|
||
{
|
||
public:
|
||
|
||
virtual BOOL OnProgress(double dPercents)
|
||
{
|
||
return TRUE;
|
||
}
|
||
};
|
||
class SerializedObjectTransformer
|
||
{
|
||
protected:
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
//
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: | T T T T |
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: 1 | 1 -> 2 -> 3 -> 4 -> 5 | 1
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: | -1 -1 -1 -1 |
|
||
//
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IN(ref=1) <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> OUT(ref=1) <20><><EFBFBD><EFBFBD> IN(ref=1) <20> IN (ref=2),
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD> IN(1) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
//
|
||
|
||
CSourceArray m_oSources; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (compose <20> <20>.<2E>.) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
|
||
ImageCache m_oImageCache; // <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20>.<2E>.
|
||
|
||
SerializedObjectTransformerPaintTextStatic m_oImagePaintTextStatic;
|
||
SerializedObjectTransformerPaintTextDynamic m_oImagePaintTextDynamic;
|
||
|
||
// <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||
ImageStudio::Caching::<EFBFBD>CacheManager m_oCache;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
ImageStudio::Paint::CPaintStateManager m_oPaintSettings;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
ImageStudio::Paint::Compose::CImageComposer m_oImageComposer;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><>.)
|
||
SerializedObjectTransformerEvents* m_pEventReceiver;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
double m_dTime;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ImageCache
|
||
IMemoryStorage* m_pMemoryStorage;
|
||
|
||
|
||
FileCache::IAVSImageFilesCache* m_pFileCache;
|
||
|
||
ImageCLSID m_oImageCLSID;
|
||
|
||
dx9::CRender m_oRender;
|
||
BOOL m_bUseVideoCard;
|
||
int m_nLastSourceInVideoCard;
|
||
|
||
static const int c_nMinImageSizeForDirectX = 0;//128*128;
|
||
|
||
protected:
|
||
void ClearCache(ImageStudio::Serialize::SerializedObjectList& oTransforms)
|
||
{
|
||
ATL::CAtlArray<int> arrIDsToKeep;
|
||
|
||
int nTransformCount = oTransforms.GetCount();
|
||
for (int nTransform = 0; nTransform < nTransformCount; ++nTransform)
|
||
{
|
||
ImageStudio::Serialize::SerializedObject* pTransform = oTransforms[nTransform];
|
||
if (NULL == pTransform)
|
||
continue;
|
||
|
||
arrIDsToKeep.Add(pTransform->GetSessionID());
|
||
}
|
||
|
||
m_oCache.Clear(arrIDsToKeep);
|
||
}
|
||
|
||
#define SerializedObjectTransformer_ProcessSerializedObject(Class, Transform, Function, Success) \
|
||
{ \
|
||
if (NULL != Transform) \
|
||
{ \
|
||
ImageStudio::Serialize::##Class* pTransformClass = (ImageStudio::Serialize::##Class*)Transform; \
|
||
Success = ##Function(pTransformClass); \
|
||
} \
|
||
}
|
||
|
||
BOOL Process_Group(ImageStudio::Serialize::SerializedGroup* pAction)
|
||
{
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>... <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20>.<2E>., <20><> <20><><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
|
||
return TRUE;
|
||
}
|
||
BOOL Process_BufferClear(ImageStudio::Serialize::SerializedBufferClear* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
return m_oSources.Clear( pAction->Index );
|
||
}
|
||
BOOL Process_BufferCopy(ImageStudio::Serialize::SerializedBufferCopy* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
return m_oSources.Copy( pAction->IndexFrom, pAction->IndexTo );
|
||
}
|
||
BOOL Process_SetAdditionalParams(ImageStudio::Serialize::Core::AdditionalParams* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
return TRUE;
|
||
}
|
||
BOOL Process_SetParamsUseVideoCard(ImageStudio::Serialize::SerializedSetParamsUseVideoCard* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
m_oRender.SetDefaultFilter( pAction->nInterpolation );
|
||
|
||
switch(pAction->nUseType)
|
||
{
|
||
case 0: m_bUseVideoCard = 0; return /*SaveResultFromVideoCard() ?*/ 1 ;//: -1;
|
||
case 1: m_bUseVideoCard = 1; return 1;
|
||
case 2: m_bUseVideoCard = 2; return 1;
|
||
default: return 0;
|
||
};
|
||
}
|
||
|
||
BOOL Process_ImageClear(ImageStudio::Serialize::Effects::ImageClear* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
return m_oSources.Clear( pAction->Index );
|
||
}
|
||
BOOL Process_ImageCopy(ImageStudio::Serialize::Effects::ImageCopy* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
if( m_oSources.IsBadIndex( pAction->IndexFrom ) ||
|
||
m_oSources.IsBadIndex( pAction->IndexTo ) )
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
if( m_oSources.IsEmptySource( pAction->IndexFrom ) )
|
||
return TRUE;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD>...
|
||
if( m_oSources.IsEmptySource( pAction->IndexTo ) )
|
||
{
|
||
return m_oSources.Set( pAction->IndexTo, m_oSources.CloneToBgra( pAction->IndexFrom, TRUE ) );
|
||
}
|
||
else
|
||
{
|
||
// <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||
// (<28><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> alpha <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||
|
||
int nSourceWidth = 0;
|
||
int nSourceHeight = 0;
|
||
int nSourceStride = 0;
|
||
BYTE* pSourcePixels = NULL;
|
||
if (ImageStudio::Transforms::Core::c_nErrorNone != Core::COM::COM_GetBGRAImageFromInterface( m_oSources.Get( pAction->IndexFrom ), pSourcePixels, nSourceWidth, nSourceHeight, &nSourceStride))
|
||
return FALSE;
|
||
|
||
int nResultWidth = 0;
|
||
int nResultHeight = 0;
|
||
int nResultStride = 0;
|
||
BYTE* pResultPixels = NULL;
|
||
if (ImageStudio::Transforms::Core::c_nErrorNone != Core::COM::COM_GetBGRAImageFromInterface( m_oSources.Get( pAction->IndexTo ), pResultPixels, nResultWidth, nResultHeight, &nResultStride))
|
||
return FALSE;
|
||
|
||
if( nSourceStride < 0 )
|
||
pSourcePixels -= (nSourceHeight - 1) * nSourceStride;
|
||
|
||
if( nResultStride < 0 )
|
||
pResultPixels -= (nResultHeight - 1) * nResultStride;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>..
|
||
// pAction <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
pAction->UpdateMask( nSourceWidth, nSourceHeight );
|
||
|
||
for( ;; )
|
||
{
|
||
|
||
if( ImageStudio::Serialize::c_nMaskAllPixels == pAction->MaskType )
|
||
{
|
||
break;
|
||
}
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
// <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> source <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> result <20><> <20><><EFBFBD><EFBFBD><EFBFBD> (0, 0)
|
||
|
||
int width = min(nSourceWidth, nResultWidth);
|
||
int height = min(nSourceHeight, nResultHeight);
|
||
|
||
BYTE* pSrcPixels = pSourcePixels;
|
||
BYTE* pDstPixels = pResultPixels;
|
||
|
||
if( ImageStudio::Serialize::c_nMaskAllPixels == pAction->MaskType )
|
||
{
|
||
for( int row = height; row > 0; --row, pSrcPixels += nSourceStride, pDstPixels += nResultStride )
|
||
{
|
||
memcpy( pDstPixels, pSrcPixels, width*4 );
|
||
}
|
||
|
||
break;
|
||
}
|
||
|
||
BYTE* pMaskPixels = pAction->m_oMask.GetPixels();
|
||
|
||
if( pAction->m_oMask.GetWidth() != nSourceWidth ||
|
||
pAction->m_oMask.GetHeight() != nSourceHeight ||
|
||
NULL == pMaskPixels )
|
||
{
|
||
break;
|
||
}
|
||
|
||
int nSrcStep = nSourceStride - nSourceWidth * 4;
|
||
int nDstStep = nResultStride - nResultWidth * 4;
|
||
int nMaskStep = nSourceWidth - width;
|
||
|
||
for( int row = height; row > 0; --row, pSrcPixels += nSrcStep, pDstPixels += nDstStep, pMaskPixels += nMaskStep )
|
||
{
|
||
for( int pos = width; pos > 0; --pos, pSrcPixels += 4, pDstPixels += 4, pMaskPixels += 1 )
|
||
{
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1
|
||
//double dAlpha1 = pMaskPixels[0] * (1.0 / 255.0);
|
||
//double dAlpha2 = 1.0 - dAlpha1;
|
||
|
||
//pDstPixels[0] = (BYTE)(dAlpha1*pSrcPixels[0] + dAlpha2*pDstPixels[0]);
|
||
//pDstPixels[1] = (BYTE)(dAlpha1*pSrcPixels[1] + dAlpha2*pDstPixels[1]);
|
||
//pDstPixels[2] = (BYTE)(dAlpha1*pSrcPixels[2] + dAlpha2*pDstPixels[2]);
|
||
//pDstPixels[3] = (BYTE)(dAlpha1*pSrcPixels[3] + dAlpha2*pDstPixels[3]);
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2 (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> 7.5 <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1)
|
||
int alpha = pMaskPixels[0];
|
||
pDstPixels[0] = AlphaComp( pDstPixels[0], pSrcPixels[0], alpha );
|
||
pDstPixels[1] = AlphaComp( pDstPixels[1], pSrcPixels[1], alpha );
|
||
pDstPixels[2] = AlphaComp( pDstPixels[2], pSrcPixels[2], alpha );
|
||
pDstPixels[3] = AlphaComp( pDstPixels[3], pSrcPixels[3], alpha );
|
||
}
|
||
}
|
||
|
||
break;
|
||
}
|
||
}
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
BOOL Process_Adjust_Brightness(ImageStudio::Serialize::Effects::AdjustBrightness* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
if( m_oSources.IsBadIndex( pAction->SourceId ) )
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_AdjustBrightness( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->Level );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Adjust_BrightnessEx(ImageStudio::Serialize::Effects::AdjustBrightnessEx* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
if( m_oSources.IsBadIndex( pAction->SourceId ) )
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_AdjustBrightnessEx( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->LevelRed, pAction->LevelGreen, pAction->LevelBlue );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Adjust_Contrast(ImageStudio::Serialize::Effects::AdjustContrast* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
if( m_oSources.IsBadIndex( pAction->SourceId ) )
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_AdjustContrast( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->Level );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Adjust_Gamma(ImageStudio::Serialize::Effects::AdjustGamma* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
if( m_oSources.IsBadIndex( pAction->SourceId ) )
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_AdjustGamma( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->Level );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Adjust_Equalize(ImageStudio::Serialize::Effects::AdjustEqualize* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
if( m_oSources.IsBadIndex( pAction->SourceId ) )
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_AdjustEqualize( m_oSources.Get( pAction->SourceId ), dCompleteness );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Adjust_Grayscale(ImageStudio::Serialize::Effects::AdjustGrayscale* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
if( m_oSources.IsBadIndex( pAction->SourceId ) )
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
double dFrame = dCompleteness * pAction->Intensity / 100;
|
||
|
||
int nResult = Core::COM::COM_AdjustGrayscale( m_oSources.Get( pAction->SourceId ), dFrame, pAction->Desaturate );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Adjust_Invert(ImageStudio::Serialize::Effects::AdjustInvert* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
if( m_oSources.IsBadIndex( pAction->SourceId ) )
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
double dFrame = dCompleteness * pAction->Intensity / 100;
|
||
|
||
int nResult = Core::COM::COM_AdjustInvert( m_oSources.Get( pAction->SourceId ), dFrame, pAction->bOverGray );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Adjust_Autobrightness(ImageStudio::Serialize::Effects::AdjustAutobrightness* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
if( m_oSources.IsBadIndex( pAction->SourceId ) )
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_AdjustAutobrightness( m_oSources.Get( pAction->SourceId ), dCompleteness );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Adjust_Autocontrast(ImageStudio::Serialize::Effects::AdjustAutocontrast* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
if( m_oSources.IsBadIndex( pAction->SourceId ) )
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_AdjustAutocontrast( m_oSources.Get( pAction->SourceId ), dCompleteness );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Adjust_Autolevels(ImageStudio::Serialize::Effects::AdjustAutolevels* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
if( m_oSources.IsBadIndex( pAction->SourceId ) )
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_AdjustAutolevels( m_oSources.Get( pAction->SourceId ), dCompleteness );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Adjust_Hue(ImageStudio::Serialize::Effects::AdjustHue* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
//dx9::EffectHLS hls;
|
||
//hls.m_dShiftHueAngle = pAction->Angle;
|
||
|
||
//int nRetCode = UpdateVideoEffect( &hls, pAction->SourceId, dCompleteness );
|
||
//if( nRetCode != 0 )
|
||
// return nRetCode;
|
||
|
||
int nResult = Core::COM::COM_AdjustHue( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->Angle );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Adjust_Saturation(ImageStudio::Serialize::Effects::AdjustSaturation* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
//dx9::EffectHLS hls;
|
||
//hls.m_dShiftSaturation = pAction->Level;
|
||
//hls.m_dFactorSaturation = pAction->Factor;
|
||
|
||
//int nRetCode = UpdateVideoEffect( &hls, pAction->SourceId, dCompleteness );
|
||
//if( nRetCode != 0 )
|
||
// return nRetCode;
|
||
|
||
int nResult = Core::COM::COM_AdjustSaturation( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->Level );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Adjust_Posterize(ImageStudio::Serialize::Effects::AdjustPosterize* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
if( m_oSources.IsBadIndex( pAction->SourceId ) )
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_AdjustPosterize( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->Levels );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Adjust_Temperature(ImageStudio::Serialize::Effects::AdjustTemperature* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
if( m_oSources.IsBadIndex( pAction->SourceId ) )
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_AdjustTemperature( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->Level );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Adjust_Colorize(ImageStudio::Serialize::Effects::AdjustColorize* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
if( m_oSources.IsBadIndex( pAction->SourceId ) )
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_AdjustColorize( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->Type, pAction->LevelRed, pAction->LevelGreen, pAction->LevelBlue );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Adjust_Threshold(ImageStudio::Serialize::Effects::AdjustThreshold* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
if( m_oSources.IsBadIndex( pAction->SourceId ) )
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_AdjustThreshold( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->Level, pAction->Grayscale );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Adjust_Sepia(ImageStudio::Serialize::Effects::AdjustSepia* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
if( m_oSources.IsBadIndex( pAction->SourceId ) )
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
int nLevel = max(0, min(pAction->Level, 100));
|
||
int nDarkness = max(0, min(pAction->Darkness, 100));
|
||
int nRedLevel = max(0, min(pAction->RedLevel, 100));
|
||
int nGreenLevel = max(0, min(pAction->GreenLevel, 100));
|
||
int nBlueLevel = max(0, min(pAction->BlueLevel, 100));
|
||
|
||
dCompleteness *= 2 - dCompleteness; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0..1
|
||
|
||
float fLevel = 0.01f * float(dCompleteness * nLevel);
|
||
float fDarkness = 0.01f * float(dCompleteness * nDarkness);
|
||
float fRedLevel = 0.01f * float(dCompleteness * (100 - nRedLevel));
|
||
float fGreenLevel = 0.01f * float(dCompleteness * (100 - nGreenLevel));
|
||
float fBlueLevel = 0.01f * float(dCompleteness * (100 - nBlueLevel));
|
||
|
||
fLevel = fLevel; // * 0.7f + 0.3f;
|
||
fDarkness = 1 - 0.5f * fDarkness;
|
||
fRedLevel = fDarkness * (1 - fRedLevel);
|
||
fGreenLevel = fDarkness * (1 - fGreenLevel);
|
||
fBlueLevel = fDarkness * (1 - fBlueLevel);
|
||
|
||
int nResult = Core::COM::COM_AdjustSepia( m_oSources.Get( pAction->SourceId ), fLevel, fRedLevel, fGreenLevel, fBlueLevel );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
|
||
BOOL Process_Adjust_WhiteBalance(ImageStudio::Serialize::Effects::AdjustWhiteBalance* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
if( m_oSources.IsBadIndex( pAction->SourceId ) )
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_AdjustWhiteBalance( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->nRed, pAction->nGreen, pAction->nBlue );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
|
||
BOOL Process_Adjust_AutoWhiteBalance(ImageStudio::Serialize::Effects::AdjustAutoWhiteBalance* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
if( m_oSources.IsBadIndex( pAction->SourceId ) )
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_AdjustAutoWhiteBalance( m_oSources.Get( pAction->SourceId ), dCompleteness );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
|
||
BOOL Process_Adjust_Clarity(ImageStudio::Serialize::Effects::AdjustClarity* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
if( m_oSources.IsBadIndex( pAction->SourceId ) )
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_AdjustClarity( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->Level, pAction->Radius, pAction->Threshold );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Adjust_Vibrance(ImageStudio::Serialize::Effects::AdjustVibrance* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
if( m_oSources.IsBadIndex( pAction->SourceId ) )
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_AdjustVibrance( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->Level );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
|
||
|
||
BOOL Process_Adjust_Recovery(ImageStudio::Serialize::Effects::AdjustRecovery* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
if( m_oSources.IsBadIndex( pAction->SourceId ) )
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_AdjustRecovery( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->nLevel );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Adjust_FillLight(ImageStudio::Serialize::Effects::AdjustFillLight* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
if( m_oSources.IsBadIndex( pAction->SourceId ) )
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_AdjustFillLight( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->nLevel );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Adjust_Exposure(ImageStudio::Serialize::Effects::AdjustExposure* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
if( m_oSources.IsBadIndex( pAction->SourceId ) )
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_AdjustExposure( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->nLevel );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Adjust_Blacks(ImageStudio::Serialize::Effects::AdjustBlacks* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if( m_oSources.IsBadIndex( pAction->SourceId ) )
|
||
return FALSE;
|
||
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_AdjustBlacks( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->nLevel );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Adjust_HighLight(ImageStudio::Serialize::Effects::AdjustHighLight* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
if( m_oSources.IsBadIndex( pAction->SourceId ) )
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_AdjustHighLight( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->nFillLight, pAction->nExposure );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Adjust_Shadows(ImageStudio::Serialize::Effects::AdjustShadows* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
if( m_oSources.IsBadIndex( pAction->SourceId ) )
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_AdjustShadows( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->nBlacks, pAction->nRecovery );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
|
||
|
||
BOOL Process_Effect_Blur(ImageStudio::Serialize::Effects::EffectBlur* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if( dCompleteness < 0.0001 )
|
||
return TRUE;
|
||
|
||
dx9::EffectBlur blur;
|
||
blur.m_dLevel = pAction->Level;
|
||
|
||
int nRetCode = UpdateVideoEffect( &blur, pAction->SourceId, dCompleteness, pAction->bUseVideoCard );
|
||
if( nRetCode != 0 )
|
||
return nRetCode;
|
||
|
||
int nResult = Core::COM::COM_EffectBlur( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->Level );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Effect_Sharpen(ImageStudio::Serialize::Effects::EffectSharpen* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if( dCompleteness < 0.000001 )
|
||
return TRUE;
|
||
|
||
dx9::EffectSharpen sharpen;
|
||
sharpen.m_dLevel = pAction->Level;
|
||
|
||
int nRetCode = UpdateVideoEffect( &sharpen, pAction->SourceId, dCompleteness, pAction->bUseVideoCard );
|
||
if( nRetCode != 0 )
|
||
return nRetCode;
|
||
|
||
int nResult = Core::COM::COM_EffectSharpen( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->Level );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Effect_Mosaic(ImageStudio::Serialize::Effects::EffectMosaic* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
if( m_oSources.IsBadIndex( pAction->SourceId ) )
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if( dCompleteness < 0.000001 )
|
||
return TRUE;
|
||
|
||
int nMetric = (2 == pAction->Metric) ? 0 : pAction->Metric;
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !GetMetricMultiplier( m_oSources.Get( pAction->SourceId ), nMetric, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
double dSize = pAction->Size * dMetricX;
|
||
dSize += dSize > 0 ? 0.5 : -0.5;
|
||
|
||
int nResult = Core::COM::COM_EffectMosaic( m_oSources.Get( pAction->SourceId ), dCompleteness, long(dSize), pAction->Simple );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Effect_GaussianBlur(ImageStudio::Serialize::Effects::EffectGaussianBlur* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if( dCompleteness < 0.0001 )
|
||
return TRUE;
|
||
|
||
int nMetric = (2 == pAction->Metric) ? 0 : pAction->Metric;
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !GetMetricMultiplier( m_oSources.Get( pAction->SourceId ), nMetric, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
int nSize = Round( pAction->Size * dMetricX );
|
||
|
||
dx9::EffectGaussinBlur blur;
|
||
blur.m_nSize = nSize;
|
||
|
||
int nRetCode = UpdateVideoEffect( &blur, pAction->SourceId, dCompleteness, pAction->bUseVideoCard );
|
||
if( nRetCode != 0 )
|
||
return nRetCode;
|
||
|
||
int nResult = Core::COM::COM_EffectGaussianBlur( m_oSources.Get( pAction->SourceId ), dCompleteness, nSize );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Effect_Noise(ImageStudio::Serialize::Effects::EffectNoise* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
if( m_oSources.IsBadIndex( pAction->SourceId ) )
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if( dCompleteness < 0.000001 )
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_EffectNoise( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->Level, pAction->Monochrome, GetBaseRandom( pAction->BaseRandom ) + DWORD(m_dTime) );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Effect_Diffuse(ImageStudio::Serialize::Effects::EffectDiffuse* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if( dCompleteness < 0.000001 )
|
||
return TRUE;
|
||
|
||
int nMetric = (2 == pAction->Metric) ? 0 : pAction->Metric;
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !m_oSources.GetMetric( pAction->SourceId, nMetric, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
double dDistance = pAction->Distance * dMetricX;
|
||
|
||
int nResult = Core::COM::COM_EffectDiffuse( m_oSources.Get( pAction->SourceId ), dCompleteness, dDistance, GetBaseRandom( pAction->BaseRandom ) + DWORD(m_dTime) );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Effect_MotionBlur(ImageStudio::Serialize::Effects::EffectMotionBlur* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
if( m_oSources.IsBadIndex( pAction->SourceId ) )
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if( dCompleteness < 0.000001 )
|
||
return TRUE;
|
||
|
||
int nMetric = (2 == pAction->Metric) ? 0 : pAction->Metric;
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !m_oSources.GetMetric( pAction->SourceId, nMetric, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
double dDistance = pAction->Distance * dMetricX;
|
||
double dAngle = -pAction->Angle;
|
||
|
||
dx9::EffectMotionBlur motion;
|
||
motion.m_dDistance = dDistance;
|
||
motion.m_dAngle = dAngle;
|
||
|
||
int nRetCode = UpdateVideoEffect( &motion, pAction->SourceId, dCompleteness, pAction->bUseVideoCard );
|
||
if( nRetCode != 0 )
|
||
return nRetCode;
|
||
|
||
int nResult = Core::COM::COM_EffectMotionBlur( m_oSources.Get( pAction->SourceId ), dCompleteness, dAngle, dDistance );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Effect_Emboss(ImageStudio::Serialize::Effects::EffectEmboss* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if( dCompleteness < 0.000001 )
|
||
return TRUE;
|
||
|
||
int nMetric = (2 == pAction->Metric) ? 0 : pAction->Metric;
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !GetMetricMultiplier( m_oSources.Get( pAction->SourceId ), nMetric, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
double dAngle = pAction->Angle;
|
||
double dDistance = pAction->Distance * dMetricX;
|
||
double dAmount = pAction->Amount;// * dMetricX;
|
||
|
||
int nResult = Core::COM::COM_EffectEmboss( m_oSources.Get( pAction->SourceId ), dCompleteness, dAngle, dDistance, dAmount, pAction->bGrayScale );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Effect_KenBurns(ImageStudio::Serialize::Effects::EffectKenBurns* pAction)
|
||
{
|
||
if ( NULL == pAction && ( NULL == m_oSources.Get(0) ) )
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness ( m_dTime );
|
||
if ( dCompleteness < 0.000001 )
|
||
return TRUE;
|
||
|
||
double CX = 0.0;
|
||
double CY = 0.0;
|
||
|
||
double Zoom = 1.0;
|
||
|
||
Gdiplus::RectF TransformRegion;
|
||
if ( FALSE == pAction->GetTransform ( pAction->GetCompletenessStage ( m_dTime ), TransformRegion ) )
|
||
return FALSE;
|
||
|
||
IUnknown* pClone = m_oSources.CloneToBgra ( 0, TRUE );
|
||
if ( NULL == pClone )
|
||
return FALSE;
|
||
|
||
double dMetricX = 1, dMetricY = 1;
|
||
GetMetricMultiplier ( m_oSources.Get( 0 ), pAction->Metric, dMetricX, dMetricY );
|
||
|
||
LONG _lwidth = 0;
|
||
LONG _lheight = 0;
|
||
m_oSources.Get(0)->get_Width(&_lwidth);
|
||
m_oSources.Get(0)->get_Height(&_lheight);
|
||
|
||
float Width = (float) _lwidth;
|
||
float Height = (float) _lheight;
|
||
|
||
float dLeft = 0.0;
|
||
float dRight = 0.0;
|
||
float dTop = 0.0;
|
||
float dBottom = 0.0;
|
||
|
||
if ( ImageStudio::Serialize::c_nMetricPixels == pAction->Metric )
|
||
{
|
||
dLeft = TransformRegion.X;
|
||
dRight = TransformRegion.Width + TransformRegion.X;
|
||
dTop = TransformRegion.Y;
|
||
dBottom = TransformRegion.Height + TransformRegion.Y;
|
||
}
|
||
|
||
if ( ImageStudio::Serialize::c_nMetricPercents == pAction->Metric )
|
||
{
|
||
dLeft = ( TransformRegion.X ) * 0.01f * Width;
|
||
dRight = ( TransformRegion.Width + TransformRegion.X ) * 0.01f * Width;
|
||
dTop = ( TransformRegion.Y ) * 0.01f * Height;
|
||
dBottom = ( TransformRegion.Height + TransformRegion.Y ) * 0.01f * Height;
|
||
}
|
||
|
||
if ( ImageStudio::Serialize::c_nMetricNormalizedCoordinates == pAction->Metric )
|
||
{
|
||
if ( (float)abs ( TransformRegion.Width ) < 0.0001f || (float)abs ( TransformRegion.Height ) < 0.0001f )
|
||
return FALSE;
|
||
|
||
dLeft = ( TransformRegion.X ) * Width;
|
||
dRight = ( TransformRegion.Width + TransformRegion.X ) * Width;
|
||
dTop = ( TransformRegion.Y ) * Height;
|
||
dBottom = ( TransformRegion.Height + TransformRegion.Y ) * Height;
|
||
}
|
||
|
||
if ( ImageStudio::Serialize::c_nMetricAlternativeNormalizedCoordinates == pAction->Metric )
|
||
{
|
||
dLeft = ( TransformRegion.X ) * (float)dMetricX;
|
||
dRight = ( TransformRegion.Width + TransformRegion.X ) * (float)dMetricX;
|
||
dTop = ( TransformRegion.Y ) * (float)dMetricY;
|
||
dBottom = ( TransformRegion.Height + TransformRegion.Y ) * (float)dMetricY;
|
||
}
|
||
|
||
BYTE* pCanvasBGRA = NULL;
|
||
int nCanvasWidth = 0;
|
||
int nCanvasHeight = 0;
|
||
int nCanvasStride = 0;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> BGRA
|
||
int nStatus = Core::COM::COM_GetBGRAImageFromInterface ( m_oSources.Get(0), pCanvasBGRA, nCanvasWidth, nCanvasHeight, &nCanvasStride);
|
||
if (nStatus != Core::c_nErrorNone)
|
||
{
|
||
RELEASEINTERFACE ( pClone );
|
||
return nStatus;
|
||
}
|
||
|
||
int nResult = Core::c_nErrorNone;
|
||
|
||
Gdiplus::Bitmap oCanvas( nCanvasWidth, nCanvasHeight, nCanvasStride, PixelFormat32bppARGB, pCanvasBGRA );
|
||
if( Gdiplus::Ok == oCanvas.GetLastStatus() )
|
||
{
|
||
Gdiplus::Graphics oRender( &oCanvas );
|
||
if( Gdiplus::Ok == oRender.GetLastStatus() )
|
||
{
|
||
nStatus = Core::COM::COM_GetBGRAImageFromInterface ( pClone, pCanvasBGRA, nCanvasWidth, nCanvasHeight, &nCanvasStride);
|
||
if (nStatus != Core::c_nErrorNone)
|
||
{
|
||
RELEASEINTERFACE ( pClone );
|
||
return nStatus;
|
||
}
|
||
|
||
Gdiplus::Bitmap oCanvas2 ( nCanvasWidth, nCanvasHeight, nCanvasStride, PixelFormat32bppARGB, pCanvasBGRA );
|
||
if( Gdiplus::Ok == oCanvas2.GetLastStatus() )
|
||
{
|
||
oRender.Clear ( 0xFF000000 );
|
||
|
||
oRender.DrawImage ( &oCanvas2, Gdiplus::RectF ( 0.0f, 0.0f, (float) Width, (float) Height ), dLeft, dTop, dRight - dLeft, dBottom - dTop, UnitPixel );
|
||
}
|
||
}
|
||
}
|
||
|
||
RELEASEINTERFACE ( pClone );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Effect_Minimal(ImageStudio::Serialize::Effects::EffectMinimal* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if( dCompleteness < 0.000001 )
|
||
return TRUE;
|
||
|
||
int nMetric = (2 == pAction->Metric) ? 0 : pAction->Metric;
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !m_oSources.GetMetric( pAction->SourceId, nMetric, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
int nSize = Round( pAction->Size * dMetricX );
|
||
|
||
dx9::EffectMinimal minimal;
|
||
minimal.m_nSize = nSize;
|
||
|
||
int nRetCode = UpdateVideoEffect( &minimal, pAction->SourceId, dCompleteness, pAction->bUseVideoCard );
|
||
if( nRetCode != 0 )
|
||
return nRetCode;
|
||
|
||
int nResult = Core::COM::COM_EffectMinimal( m_oSources.Get( pAction->SourceId ), dCompleteness, nSize );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Effect_Maximal(ImageStudio::Serialize::Effects::EffectMaximal* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if( dCompleteness < 0.000001 )
|
||
return TRUE;
|
||
|
||
int nMetric = (2 == pAction->Metric) ? 0 : pAction->Metric;
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !m_oSources.GetMetric( pAction->SourceId, nMetric, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
int nSize = Round( pAction->Size * dMetricX );
|
||
|
||
dx9::EffectMaximal maximal;
|
||
maximal.m_nSize = nSize;
|
||
|
||
int nRetCode = UpdateVideoEffect( &maximal, pAction->SourceId, dCompleteness, pAction->bUseVideoCard );
|
||
if( nRetCode != 0 )
|
||
return nRetCode;
|
||
|
||
int nResult = Core::COM::COM_EffectMaximal( m_oSources.Get( pAction->SourceId ), dCompleteness, nSize );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Effect_Deinterlace(ImageStudio::Serialize::Effects::EffectDeinterlace* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.000001)
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_EffectDeinterlace( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->Even, pAction->Interpolate );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Effect_Median(ImageStudio::Serialize::Effects::EffectMedian* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.000001)
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_EffectMedian( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->Type );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Effect_ChromoKey_Range(ImageStudio::Serialize::Effects::EffectChromoKeyRange* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.000001)
|
||
return TRUE;
|
||
|
||
if( m_oSources.IsBadIndex( pAction->GetBufferIndex() ) )
|
||
return FALSE;
|
||
|
||
int nResult = Core::COM::COM_EffectChromoKeyRange(m_oSources.Get( pAction->GetBufferIndex() ), pAction->GetColor1(), pAction->GetThreshold1(), pAction->GetColor2(), pAction->GetThreshold2(), dCompleteness, (1 == pAction->GetComposeAlpha()), pAction->GetEdgesSmooth () );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Effect_ChromoKey_Level(ImageStudio::Serialize::Effects::EffectChromoKeyLevel* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.000001)
|
||
return TRUE;
|
||
|
||
if( m_oSources.IsBadIndex( pAction->GetBufferIndex() ) )
|
||
return FALSE;
|
||
|
||
int nCountColors = pAction->arrColors.GetSize();
|
||
for( int i = 0; i < nCountColors; ++i )
|
||
{
|
||
Core::COM::COM_EffectChromoKeyLevel( m_oSources.Get( pAction->GetBufferIndex() ), pAction->arrColors[i], pAction->GetThreshold(), dCompleteness, (1 == pAction->GetComposeAlpha()), pAction->GetEdgesSmooth () );
|
||
}
|
||
|
||
return Core::c_nErrorNone;
|
||
}
|
||
BOOL Process_Effect_Cinema(ImageStudio::Serialize::Effects::EffectCinema* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if( dCompleteness < 0.000001 )
|
||
return TRUE;
|
||
|
||
double dTime = pAction->GetRelativeTime(m_dTime);
|
||
|
||
int nSessionID = pAction->GetSessionID();
|
||
ImageStudio::Caching::CCacheItem* pCacheItem = m_oCache.GetAt(nSessionID);
|
||
if (NULL == pCacheItem || ImageStudio::Caching::c_nTypePointer != pCacheItem->GetType())
|
||
{
|
||
ImageStudio::Paint::Effects::Cinema* pEffect = new ImageStudio::Paint::Effects::Cinema( );
|
||
|
||
pEffect->Create( *pAction );
|
||
|
||
m_oCache.Add(nSessionID, pEffect);
|
||
|
||
pCacheItem = pEffect;
|
||
}
|
||
|
||
ImageStudio::Paint::Effects::Cinema* pPainter = (ImageStudio::Paint::Effects::Cinema*)pCacheItem;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||
int nResult = Core::COM::COM_EffectCinema(m_oSources.Get( pAction->SourceId ), pPainter, dTime, dCompleteness, pAction->m_nBrightness, pAction->m_nContrast);
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
BOOL Process_Effect_Glass(ImageStudio::Serialize::Effects::EffectGlass* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if( dCompleteness < 0.000001 )
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_EffectGlass( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->Radius );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Effect_GlassMosaic(ImageStudio::Serialize::Effects::EffectGlassMosaic* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if( dCompleteness < 0.000001 )
|
||
return TRUE;
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !m_oSources.GetMetric( pAction->SourceId, pAction->Metric, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
double dSizeX = pAction->SizeX * dMetricX;
|
||
double dSizeY = pAction->SizeY * dMetricY;
|
||
double dOffsetX = pAction->OffsetX * dMetricX;
|
||
double dOffsetY = pAction->OffsetY * dMetricY;
|
||
|
||
dx9::EffectGlassMosaic mosaic;
|
||
mosaic.m_dSizeX = dSizeX;
|
||
mosaic.m_dSizeY = dSizeY;
|
||
mosaic.m_dOffsetX = dOffsetX;
|
||
mosaic.m_dOffsetY = dOffsetY;
|
||
mosaic.m_dCurvature = pAction->Curvature;
|
||
mosaic.m_dAngle = pAction->Angle;
|
||
mosaic.m_dSmooth = pAction->Smooth / 10;
|
||
mosaic.m_eQuality = pAction->Quality;
|
||
mosaic.m_dScale = pAction->Scale;
|
||
mosaic.m_dMaxFactor = pAction->MaxFactor;
|
||
|
||
int nRetCode = UpdateVideoEffect( &mosaic, pAction->SourceId, dCompleteness, pAction->bUseVideoCard );
|
||
if( nRetCode != 0 )
|
||
return nRetCode;
|
||
|
||
int nResult = Core::COM::COM_EffectGlassMosaic( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->Angle, dSizeX, dSizeY, dOffsetX, dOffsetY, pAction->Curvature, pAction->Smooth / 10, pAction->Quality );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Effect_PencilSketch(ImageStudio::Serialize::Effects::EffectPencilSketch* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if( dCompleteness < 0.000001 )
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_EffectPencilSketch( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->Level, pAction->m_nBrightness, pAction->m_nContrast, pAction->m_nLengthFactor );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Effect_WaterColor(ImageStudio::Serialize::Effects::EffectWaterColor* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if( dCompleteness < 0.000001 )
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_EffectWaterColor( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->BrushSize, pAction->Coarseness );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Effect_Glow(ImageStudio::Serialize::Effects::EffectGlow* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if( dCompleteness < 0.000001 )
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_EffectGlow( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->Size );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Effect_TVSimulation(ImageStudio::Serialize::Effects::EffectTVSimulation* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if( dCompleteness < 0.000001 )
|
||
return TRUE;
|
||
|
||
double dTime = pAction->GetRelativeTime(m_dTime);
|
||
|
||
int nSessionID = pAction->GetSessionID();
|
||
ImageStudio::Caching::CCacheItem* pCacheItem = m_oCache.GetAt(nSessionID);
|
||
if (NULL == pCacheItem || ImageStudio::Caching::c_nTypePointer != pCacheItem->GetType())
|
||
{
|
||
ImageStudio::Paint::Effects::TVSimulator* pEffect = new ImageStudio::Paint::Effects::TVSimulator();
|
||
|
||
double dMetricX, dMetricY;
|
||
GetMetricMultiplier( m_oSources.Get( pAction->SourceId ), pAction->Metric, dMetricX, dMetricY );
|
||
|
||
pEffect->Create( *pAction, dMetricX, dMetricY );
|
||
|
||
m_oCache.Add(nSessionID, pEffect);
|
||
|
||
pCacheItem = pEffect;
|
||
}
|
||
|
||
ImageStudio::Paint::Effects::TVSimulator* pPainter = (ImageStudio::Paint::Effects::TVSimulator*)pCacheItem;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||
int nResult = Core::COM::COM_EffectTVSimulation( m_oSources.Get( pAction->SourceId ), pPainter, dTime, dCompleteness);
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Effect_GrayOut(ImageStudio::Serialize::Effects::EffectGrayOut* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if( dCompleteness < 0.000001 )
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_EffectGrayOut( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->Color, pAction->Filter, pAction->LevelRed, pAction->LevelGreen, pAction->LevelBlue, pAction->Threshold, pAction->Type );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Effect_Wind(ImageStudio::Serialize::Effects::EffectWind* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if( dCompleteness < 0.000001 )
|
||
return TRUE;
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !GetMetricMultiplier( m_oSources.Get( pAction->SourceId ), pAction->nMetric, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
int nLength = int(pAction->dLength * dMetricX);
|
||
|
||
int nResult = Core::COM::COM_EffectWind( m_oSources.Get( pAction->SourceId ), dCompleteness, nLength, pAction->nDensity );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Effect_Newsprint(ImageStudio::Serialize::Effects::EffectNewsprint* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if( dCompleteness < 0.000001 )
|
||
return TRUE;
|
||
|
||
dx9::EffectNewsprint newsprint;
|
||
newsprint.m_dLevel = pAction->Level;
|
||
|
||
int nRetCode = UpdateVideoEffect( &newsprint, pAction->SourceId, dCompleteness, pAction->bUseVideoCard );
|
||
if( nRetCode != 0 )
|
||
return nRetCode;
|
||
|
||
int nResult = Core::COM::COM_EffectNewsprint( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->Level, pAction->Filter );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Effect_Snow(ImageStudio::Serialize::Effects::EffectSnow* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if( dCompleteness < 0.000001 )
|
||
return TRUE;
|
||
|
||
double dTime = pAction->GetRelativeTime(m_dTime);
|
||
|
||
int nSessionID = pAction->GetSessionID();
|
||
ImageStudio::Caching::CCacheItem* pCacheItem = m_oCache.GetAt(nSessionID);
|
||
if (NULL == pCacheItem || ImageStudio::Caching::c_nTypePointer != pCacheItem->GetType())
|
||
{
|
||
ImageStudio::Paint::Effects::Snow* pEffect = new ImageStudio::Paint::Effects::Snow();
|
||
|
||
pEffect->Create( *pAction );
|
||
|
||
m_oCache.Add(nSessionID, pEffect);
|
||
|
||
pCacheItem = pEffect;
|
||
}
|
||
|
||
ImageStudio::Paint::Effects::Snow* pPainter = (ImageStudio::Paint::Effects::Snow*)pCacheItem;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||
int nResult = Core::COM::COM_EffectSnow( m_oSources.Get( pAction->SourceId ), pPainter, dTime, dCompleteness, pAction->m_bSnowDrift, pAction->m_dSnowDriftSpeedFactor);
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
|
||
BOOL Process_Effect_JpegCompression(ImageStudio::Serialize::Effects::EffectJpegCompression* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if( dCompleteness < 0.000001 )
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_EffectJpegCompression( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->m_nQuality);
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Effect_SoftFocus(ImageStudio::Serialize::Effects::EffectSoftFocus* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if( dCompleteness < 0.000001 )
|
||
return TRUE;
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !GetMetricMultiplier( m_oSources.Get( pAction->SourceId ), pAction->Metric, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
double dBlurSize = pAction->BlurSize * dMetricX;
|
||
dBlurSize += dBlurSize > 0 ? 0.5 : -0.5;
|
||
|
||
return Core::COM::COM_EffectSoftFocus( m_oSources.Get( pAction->SourceId ), dCompleteness, dBlurSize, pAction->Intensity, pAction->Type );
|
||
}
|
||
BOOL Process_Effect_OldPhoto(ImageStudio::Serialize::Effects::EffectOldPhoto* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if( dCompleteness < 0.000001 )
|
||
return TRUE;
|
||
|
||
int nSessionID = pAction->GetSessionID();
|
||
ImageStudio::Caching::CCacheItem* pCacheItem = m_oCache.GetAt(nSessionID);
|
||
if (NULL == pCacheItem || ImageStudio::Caching::c_nTypePointer != pCacheItem->GetType())
|
||
{
|
||
ImageStudio::Paint::Effects::OldPhoto* pEffect = new ImageStudio::Paint::Effects::OldPhoto();
|
||
|
||
m_oCache.Add(nSessionID, pEffect);
|
||
|
||
pCacheItem = pEffect;
|
||
}
|
||
|
||
ImageStudio::Paint::Effects::OldPhoto* pPainter = (ImageStudio::Paint::Effects::OldPhoto*)pCacheItem;
|
||
|
||
|
||
int nResult = Core::COM::COM_EffectOldPhoto( m_oSources.Get( pAction->SourceId ), dCompleteness, pPainter, pAction->m_nMask, pAction->m_nClarity, pAction->m_WhiteBlack );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Effect_Vignette(ImageStudio::Serialize::Effects::EffectVignette* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if( dCompleteness < 0.000001 )
|
||
return TRUE;
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !m_oSources.GetMetric( pAction->SourceId, pAction->nMetric, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
double dCenterX = dMetricX * pAction->dCenterX;
|
||
double dCenterY = dMetricY * pAction->dCenterY;
|
||
double dRadius1X = dMetricX * pAction->dRadius1X;
|
||
double dRadius1Y = dMetricY * pAction->dRadius1Y;
|
||
double dRadius2X = dMetricX * pAction->dRadius2X;
|
||
double dRadius2Y = dMetricY * pAction->dRadius2Y;
|
||
|
||
int nResult = Core::COM::COM_EffectVignette( m_oSources.Get( pAction->SourceId ), dCompleteness, dCenterX, dCenterY, dRadius1X, dRadius1Y, dRadius2X, dRadius2Y, pAction->dAngle, pAction->dIntensity );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Effect_PostCrop(ImageStudio::Serialize::Effects::EffectPostCrop* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if( dCompleteness < 0.000001 )
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_EffectPostCrop( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->dAmount, pAction->dMidpoint, pAction->dRoundness, pAction->dFeather );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Effect_SetAlphaChannel(ImageStudio::Serialize::Effects::EffectSetAlphaChannel* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if( dCompleteness < 0.000001 )
|
||
return TRUE;
|
||
|
||
IUnknown* pMask = m_oSources.Get( pAction->nSrcBuffer );
|
||
if( !pMask )
|
||
{
|
||
Core::COM::COM_LoadImage( &pMask, pAction->sFilePath, 0, FALSE );
|
||
}
|
||
else
|
||
{
|
||
pMask->AddRef();
|
||
}
|
||
|
||
if( !pMask )
|
||
return TRUE;
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !m_oSources.GetMetric( pAction->SourceId, pAction->nMetric, dMetricX, dMetricY ) )
|
||
{
|
||
pMask->Release();
|
||
return FALSE;
|
||
}
|
||
|
||
double dX = pAction->dX * dMetricX;
|
||
double dY = pAction->dY * dMetricY;
|
||
double dW = pAction->dWidth * dMetricX;
|
||
double dH = pAction->dHeight * dMetricY;
|
||
|
||
int nResult = Core::COM::COM_EffectSetAlphaChannel( m_oSources.Get( pAction->SourceId ), pMask, dCompleteness, pAction->nType, dX, dY, dW, dH );
|
||
|
||
pMask->Release();
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Effect_ZoomingSphere(ImageStudio::Serialize::Effects::EffectZoomingSphere* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if( dCompleteness < 0.000001 )
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_EffectZoomingSphere( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->Power );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Effect_WaterMirrow(ImageStudio::Serialize::Effects::EffectWaterMirrow* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if( dCompleteness < 0.000001 )
|
||
return TRUE;
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !m_oSources.GetMetric( pAction->SourceId, 2, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
double m[9]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
|
||
if( !pAction->UpdateMask( (int)dMetricX, (int)dMetricY, m ) )
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_EffectWaterMirrow( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->m_oMask.GetPixels(), m, pAction->AlphaMax, pAction->AlphaMin );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Effect_ShapeMosaic(ImageStudio::Serialize::Effects::EffectShapeMosaic* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if( dCompleteness < 0.000001 )
|
||
return TRUE;
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !m_oSources.GetMetric( pAction->SourceId, pAction->nMetric, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
int nMosaicSize = Round( dMetricX * pAction->dMosaicSize );
|
||
|
||
int nResult = Core::COM::COM_EffectShapeMosaic( m_oSources.Get( pAction->SourceId ), dCompleteness, nMosaicSize );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Effect_Particles(ImageStudio::Serialize::Effects::EffectParticles* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if( dCompleteness < 0.000001 )
|
||
return TRUE;
|
||
|
||
double dTime = pAction->GetRelativeTime(m_dTime);
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !m_oSources.GetMetric( pAction->SourceId, pAction->nMetric, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
int nSessionID = pAction->GetSessionID();
|
||
ImageStudio::Caching::CCacheItem* pCacheItem = m_oCache.GetAt(nSessionID);
|
||
if (NULL == pCacheItem || ImageStudio::Caching::c_nTypePointer != pCacheItem->GetType())
|
||
{
|
||
ImageStudio::Paint::Effects::Particles* pEffect = new ImageStudio::Paint::Effects::Particles();
|
||
|
||
IMediaFrame* pFrame = NULL;
|
||
Core::COM::COM_LoadImage( (IUnknown**)&pFrame, pAction->sFilePath, 0, 0 );
|
||
|
||
pEffect->SetSorceFrame( pFrame, RealToByte( pAction->nTransparency / 100.0 * 255.0 ) );
|
||
|
||
pEffect->m_dDirBaseAngle = pAction->dBaseDirAngle;
|
||
pEffect->m_dDirDispAngle = pAction->dDispDirAngle;
|
||
pEffect->m_dMinSize = pAction->dMinSize * dMetricX;
|
||
pEffect->m_dMaxSize = pAction->dMaxSize * dMetricX;
|
||
pEffect->m_dMinLifeTime = pAction->dMinLifeTime;
|
||
pEffect->m_dMaxLifeTime = pAction->dMaxLifeTime;
|
||
pEffect->m_dMinRotTime = pAction->dMinRotTime;
|
||
pEffect->m_dMaxRotTime = pAction->dMaxRotTime;
|
||
pEffect->m_dMinRotAngle = pAction->dMinRotAngle;
|
||
pEffect->m_dMaxRotAngle = pAction->dMaxRotAngle;
|
||
pEffect->m_nAbsRot = pAction->bAbsRot;
|
||
pEffect->m_nRotType = pAction->nRotType;
|
||
|
||
pEffect->CreateParticles( pAction->nMaxCountParticles );
|
||
|
||
m_oCache.Add(nSessionID, pEffect);
|
||
|
||
pCacheItem = pEffect;
|
||
}
|
||
|
||
ImageStudio::Paint::Effects::Particles* pPainter = (ImageStudio::Paint::Effects::Particles*)pCacheItem;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||
int nResult = Core::COM::COM_EffectParticles( m_oSources.Get( pAction->SourceId ), pPainter, dTime, dCompleteness );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Effect_Canvas(ImageStudio::Serialize::Effects::EffectCanvas* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if( dCompleteness < 0.000001 )
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_EffectCanvas( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->Alpha, GetBaseRandom( pAction->BaseRandom ) );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Effect_Glow2(ImageStudio::Serialize::Effects::EffectGlow2* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if( dCompleteness < 0.000001 )
|
||
return TRUE;
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !GetMetricMultiplier( m_oSources.Get( pAction->SourceId ), pAction->Metric, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
double dBlurSize = pAction->Size * dMetricX;
|
||
|
||
return Core::COM::COM_EffectSoftFocus( m_oSources.Get( pAction->SourceId ), dCompleteness, dBlurSize, 100, 0 );
|
||
}
|
||
BOOL Process_Effect_ColorExchange(ImageStudio::Serialize::Effects::EffectColorExchange* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if( dCompleteness < 0.000001 )
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_EffectColorExchange( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->Color1, pAction->Color2 );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Effect_Anaglyph3d(ImageStudio::Serialize::Effects::EffectAnaglyph3d* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if( dCompleteness < 0.000001 )
|
||
return TRUE;
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !m_oSources.GetMetric( pAction->SourceId, 2, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
int nResult = Core::COM::COM_EffectAnaglyph3d( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->nDepth / 10.0, pAction->nType );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
|
||
BOOL Process_Transform_Flip(ImageStudio::Serialize::Effects::TransformFlip* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
dx9::EffectZoom zoom;
|
||
zoom.m_dZoomX = pAction->Vertical ? 1 : -1;
|
||
zoom.m_dZoomY = pAction->Vertical ? -1 : 1;
|
||
zoom.m_nBackColor = dx9::GetColor( pAction->BackColor, pAction->BackAlpha );
|
||
|
||
int nRetCode = UpdateVideoEffect( &zoom, pAction->SourceId, dCompleteness, pAction->bUseVideoCard );
|
||
if( nRetCode != 0 )
|
||
return nRetCode;
|
||
|
||
int nResult = Core::COM::COM_TransformFlip( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->Vertical, pAction->BackColor, pAction->BackAlpha );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Transform_Flip2(ImageStudio::Serialize::Effects::TransformFlip2* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_TransformFlip2( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->Dir, pAction->BackColor, pAction->BackAlpha );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Transform_Perspective(ImageStudio::Serialize::Effects::TransformPerspective* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
dx9::EffectPerspective perspective;
|
||
perspective.m_bVertical = pAction->Vertical;
|
||
perspective.m_dAngle = pAction->Angle;
|
||
perspective.m_nBackColor = dx9::GetColor( pAction->BackColor, pAction->BackAlpha );
|
||
|
||
perspective.m_bAlternative = pAction->Alternative;
|
||
perspective.m_oPoints[0].x = pAction->X1;
|
||
perspective.m_oPoints[0].y = pAction->Y1;
|
||
perspective.m_oPoints[1].x = pAction->X2;
|
||
perspective.m_oPoints[1].y = pAction->Y2;
|
||
perspective.m_oPoints[2].x = pAction->X3;
|
||
perspective.m_oPoints[2].y = pAction->Y3;
|
||
perspective.m_oPoints[3].x = pAction->X4;
|
||
perspective.m_oPoints[3].y = pAction->Y4;
|
||
|
||
int nRetCode = UpdateVideoEffect( &perspective, pAction->SourceId, dCompleteness, pAction->bUseVideoCard );
|
||
if( nRetCode != 0 )
|
||
return nRetCode;
|
||
|
||
int nResult = Core::COM::COM_TransformPerspective( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->Vertical, pAction->Angle, pAction->BackColor, pAction->BackAlpha );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Transform_Skew(ImageStudio::Serialize::Effects::TransformSkew* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
dx9::EffectSkew skew;
|
||
skew.m_dAngle = pAction->Angle;
|
||
skew.m_bVertical = pAction->Vertical;
|
||
skew.m_nBackColor = dx9::GetColor( pAction->BackColor, pAction->BackAlpha );
|
||
|
||
int nRetCode = UpdateVideoEffect( &skew, pAction->SourceId, dCompleteness, pAction->bUseVideoCard );
|
||
if( nRetCode != 0 )
|
||
return nRetCode;
|
||
|
||
int nResult = Core::COM::COM_TransformSkew( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->Vertical, pAction->Angle, pAction->BackColor, pAction->BackAlpha );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Transform_Shift(ImageStudio::Serialize::Effects::TransformShift* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
dx9::EffectZoom zoom;
|
||
zoom.m_dZoomX = 1;
|
||
zoom.m_dZoomY = 1;
|
||
zoom.m_dDispX = pAction->OffsetX;
|
||
zoom.m_dDispY = pAction->OffsetY;
|
||
zoom.m_nMetric = pAction->Metric;
|
||
zoom.m_nBackColor = dx9::GetColor( pAction->BackColor, pAction->BackAlpha );
|
||
|
||
int nRetCode = UpdateVideoEffect( &zoom, pAction->SourceId, dCompleteness, pAction->bUseVideoCard );
|
||
if( nRetCode != 0 )
|
||
return nRetCode;
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !m_oSources.GetMetric( pAction->SourceId, pAction->Metric, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
// <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
double dOffsetX = pAction->OffsetX * dMetricX;
|
||
double dOffsetY = pAction->OffsetY * dMetricY;
|
||
|
||
dOffsetX += dOffsetX > 0 ? 0.5 : -0.5;
|
||
dOffsetY += dOffsetY > 0 ? 0.5 : -0.5;
|
||
|
||
int nResult = Core::COM::COM_TransformShift( m_oSources.Get( pAction->SourceId ), dCompleteness, long(dOffsetX), long(dOffsetY), pAction->BackColor, pAction->BackAlpha );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Transform_Rotate(ImageStudio::Serialize::Effects::TransformRotate* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
dx9::EffectRotate rotate;
|
||
rotate.m_dAngle = pAction->Angle;
|
||
rotate.m_nType = pAction->Size;
|
||
rotate.m_nBackColor = dx9::GetColor( pAction->BackColor, pAction->BackAlpha );
|
||
|
||
int nRetCode = UpdateVideoEffect( &rotate, pAction->SourceId, dCompleteness, pAction->bUseVideoCard );
|
||
if( nRetCode != 0 )
|
||
return nRetCode;
|
||
|
||
int nResult = Core::c_nErrorNone;
|
||
|
||
IMediaFrame* pSrcFrame = m_oSources.Get( pAction->SourceId );
|
||
|
||
if (pAction->Size == 1)
|
||
{
|
||
nResult = Core::COM::COM_TransformRotate( pSrcFrame, dCompleteness, pAction->Angle, pAction->BackColor, pAction->BackAlpha );
|
||
}
|
||
else
|
||
{
|
||
IUnknown* pResult = NULL;
|
||
nResult = Core::COM::COM_TransformRotateMedia( pSrcFrame, &pResult, dCompleteness, pAction->Angle, pAction->BackColor, pAction->BackAlpha, 0 == pAction->Size );
|
||
|
||
if( pResult )
|
||
{
|
||
m_oSources.Set( pAction->SourceId, pResult );
|
||
}
|
||
}
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Transform_RotateAdvanced(ImageStudio::Serialize::Effects::TransformRotateAdvanced* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
//if (pAction->IndexFrom < 0 || pAction->IndexFrom >= c_nInterfacesCount || pAction->IndexTo < 0 || pAction->IndexTo >= c_nInterfacesCount)
|
||
// return FALSE;
|
||
|
||
IUnknown* pSource = m_oSources.Get( pAction->IndexFrom );
|
||
IUnknown* pResult = m_oSources.Get( pAction->IndexTo );
|
||
|
||
if (NULL == pSource || NULL == pResult)
|
||
return TRUE;
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !GetMetricMultiplier( pResult, pAction->Metric, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
// <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
double dCenterX = pAction->CenterX * dMetricX;
|
||
double dCenterY = pAction->CenterY * dMetricY;
|
||
double dAngle = pAction->Angle * dCompleteness;
|
||
double dScale = pAction->Scale * dCompleteness;
|
||
|
||
int nResult = Core::COM::COM_Rotate( pSource, pResult, dCenterX, dCenterY, dAngle, dScale, dScale, pAction->Alpha, pAction->Interpolate );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Transform_RotateSimple(ImageStudio::Serialize::Effects::TransformRotateSimple* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_RotateSimple( m_oSources.Get( pAction->SourceId ), pAction->Type );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Transform_Resample(ImageStudio::Serialize::Effects::TransformResample* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
double scale = max(1, pAction->Times);
|
||
|
||
dx9::EffectZoom zoom;
|
||
zoom.m_dZoomX = 1 / scale;
|
||
zoom.m_dZoomY = 1 / scale;
|
||
zoom.m_bResample = TRUE;
|
||
|
||
int nRetCode = UpdateVideoEffect( &zoom, pAction->SourceId, dCompleteness, pAction->bUseVideoCard );
|
||
if( nRetCode != 0 )
|
||
return nRetCode;
|
||
|
||
int nResult = Core::COM::COM_TransformResample( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->Times );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Transform_Zoom(ImageStudio::Serialize::Effects::TransformZoom* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
int nZoom = pAction->Zoom; //min(max(pAction->Zoom, -100), 100);
|
||
double dZoom = nZoom / 100.0;
|
||
if( nZoom > 0 )
|
||
dZoom *= 10;
|
||
|
||
dZoom += 1;
|
||
|
||
dx9::EffectZoom zoom;
|
||
zoom.m_dZoomX = dZoom;
|
||
zoom.m_dZoomY = dZoom;
|
||
zoom.m_dDispX = pAction->dx;
|
||
zoom.m_dDispY = pAction->dy;
|
||
zoom.m_nMetric = pAction->Metric;
|
||
zoom.m_nBackColor = dx9::GetColor( pAction->BackColor, pAction->BackAlpha );
|
||
|
||
int nRetCode = UpdateVideoEffect( &zoom, pAction->SourceId, dCompleteness, pAction->bUseVideoCard );
|
||
if( nRetCode != 0 )
|
||
return nRetCode;
|
||
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !m_oSources.GetMetric( pAction->SourceId, pAction->Metric, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
dZoom = (dZoom - 1) * dCompleteness + 1;
|
||
|
||
if( dZoom < 0.00001 )
|
||
dZoom = 0.00001;
|
||
|
||
if( dMetricX != 1.0 ) dMetricX *= 0.5;
|
||
if( dMetricY != 1.0 ) dMetricY *= 0.5;
|
||
|
||
double dx = pAction->dx * dMetricX * dCompleteness;
|
||
double dy = pAction->dy * dMetricY * dCompleteness;
|
||
|
||
int nResult = Core::COM::COM_TransformZoom( m_oSources.Get( pAction->SourceId ), dZoom, dx, dy, pAction->BackColor, pAction->BackAlpha );
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Transform_ZoomLinear(ImageStudio::Serialize::Effects::TransformZoomLinear* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001 )
|
||
return TRUE;
|
||
|
||
dx9::EffectZoom zoom;
|
||
zoom.m_dZoomX = pAction->dZoomX;
|
||
zoom.m_dZoomY = pAction->dZoomY;
|
||
zoom.m_dDispX = -pAction->dx;
|
||
zoom.m_dDispY = pAction->dy;
|
||
zoom.m_nMetric = pAction->Metric;
|
||
zoom.m_nBackColor = dx9::GetColor( pAction->BackColor, pAction->BackAlpha );
|
||
|
||
int nRetCode = UpdateVideoEffect( &zoom, pAction->SourceId, dCompleteness, pAction->bUseVideoCard );
|
||
if( nRetCode != 0 )
|
||
return nRetCode;
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !GetMetricMultiplier( m_oSources.Get( pAction->SourceId ), pAction->Metric, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
if( dMetricX != 1.0 ) dMetricX *= 0.5;
|
||
if( dMetricY != 1.0 ) dMetricY *= 0.5;
|
||
|
||
double dx = pAction->dx * dMetricX * dCompleteness;
|
||
double dy = pAction->dy * dMetricY * dCompleteness;
|
||
double dScaleX = 1 + (pAction->dZoomX - 1) * dCompleteness;
|
||
double dScaleY = 1 + (pAction->dZoomY - 1) * dCompleteness;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
ImageStudio::Core::MediaData oSrcMediaData;
|
||
if (!oSrcMediaData.Create( m_oSources.Get( pAction->SourceId ), FALSE) || !oSrcMediaData.IsValidBGRA())
|
||
return FALSE;
|
||
|
||
BYTE* pSrcPixels = oSrcMediaData.GetBuffer();
|
||
int nSrcWidth = oSrcMediaData.GetWidth();
|
||
int nSrcHeight = oSrcMediaData.GetHeight();
|
||
int nSrcStride = oSrcMediaData.GetStride();
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
ImageStudio::Core::MediaData oDstMediaData;
|
||
if (!oDstMediaData.Create( m_oSources.Get( pAction->SourceId ), FALSE) || !oDstMediaData.IsValidBGRA())
|
||
return FALSE;
|
||
|
||
BYTE* pDstPixels = oDstMediaData.GetBuffer();
|
||
int nDstWidth = oDstMediaData.GetWidth();
|
||
int nDstHeight = oDstMediaData.GetHeight();
|
||
int nDstStride = oDstMediaData.GetStride();
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
Core::BGRA::ClearImage( pDstPixels, nDstWidth, nDstHeight, nDstWidth * 4, pAction->BackColor, pAction->BackAlpha );
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
double dSrcScaleW = nSrcWidth * dScaleX;
|
||
double dSrcScaleH = nSrcHeight * dScaleY;
|
||
double dSrcScaleX = (nDstWidth - dSrcScaleW)*0.5 - dx * dScaleX;
|
||
double dSrcScaleY = (nDstHeight - dSrcScaleH)*0.5 - dy * dScaleY;
|
||
|
||
Gdiplus::RectF oSrcScaleRect( (float)dSrcScaleX, (float)dSrcScaleY, (float)dSrcScaleW, (float)dSrcScaleH );
|
||
Gdiplus::RectF oOutRect( 0, 0, (float)nDstWidth, (float)nDstHeight );
|
||
|
||
if( oOutRect.Intersect( oSrcScaleRect ) )
|
||
{
|
||
IppiRect oSrcRect;
|
||
oSrcRect.x = int((oOutRect.X - oSrcScaleRect.X) / dScaleX + 0.5);
|
||
oSrcRect.y = int((oOutRect.Y - oSrcScaleRect.Y) / dScaleY + 0.5);
|
||
oSrcRect.width = int(oOutRect.Width / dScaleX + 0.5);
|
||
oSrcRect.height = int(oOutRect.Height / dScaleY + 0.5);
|
||
|
||
IppiRect oDstRect;
|
||
oDstRect.x = int(oOutRect.X + 0.5f);
|
||
oDstRect.y = int(oOutRect.Y + 0.5f);
|
||
oDstRect.width = int(oOutRect.Width + 0.5f);
|
||
oDstRect.height = int(oOutRect.Height + 0.5f);
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
if( --oSrcRect.x < 0 ) oSrcRect.x = 0;
|
||
if( --oSrcRect.y < 0 ) oSrcRect.y = 0;
|
||
if( ++oSrcRect.width > nSrcWidth ) oSrcRect.width = nSrcWidth;
|
||
if( ++oSrcRect.height > nSrcHeight ) oSrcRect.height = nSrcHeight;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
pDstPixels += oDstRect.x*4 + oDstRect.y*nDstStride;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
// !!! <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ippiResizeCenter(). <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!
|
||
IppiSize oSrcSize = {nSrcWidth, nSrcHeight};
|
||
IppiSize oDstSize = {oDstRect.width, oDstRect.height};
|
||
|
||
ippiResize_8u_C4R( pSrcPixels, oSrcSize, nSrcStride, oSrcRect, pDstPixels, nDstStride, oDstSize, dScaleX, dScaleY, IPPI_INTER_LINEAR);
|
||
}
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
m_oSources.Set( 0, oDstMediaData.GetMediaData(TRUE) );
|
||
|
||
oSrcMediaData.Destroy();
|
||
oDstMediaData.Destroy();
|
||
|
||
return m_oSources.IsValidSource( 0 );
|
||
}
|
||
BOOL Process_Transform_Mirror(ImageStudio::Serialize::Effects::TransformMirror* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_TransformMirror( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->Type, pAction->Level/100.0);
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Transform_Resize(ImageStudio::Serialize::Effects::TransformResize* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !m_oSources.GetMetric( pAction->SourceId, pAction->Metric, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
double dNewWidth = pAction->Width * dMetricX;
|
||
double dNewHeight = pAction->Height * dMetricY;
|
||
|
||
double dSrcMetricX = dMetricX;
|
||
double dSrcMetricY = dMetricY;
|
||
|
||
if( pAction->SrcMetric >= 0 )
|
||
{
|
||
if( !m_oSources.GetMetric( pAction->SourceId, pAction->SrcMetric, dSrcMetricX, dSrcMetricY ) )
|
||
return FALSE;
|
||
}
|
||
|
||
int nSrcX = int(pAction->SrcX * dSrcMetricX + 0.5);
|
||
int nSrcY = int(pAction->SrcY * dSrcMetricY + 0.5);
|
||
int nSrcW = int(pAction->SrcWidth * dSrcMetricX + 0.5);
|
||
int nSrcH = int(pAction->SrcHeight * dSrcMetricY + 0.5);
|
||
|
||
|
||
IO::CMetaFile* pMetaFile = m_oSources.GetMetafile( pAction->SourceId );
|
||
if( pMetaFile )
|
||
{
|
||
BOOL bResult = ResizeMetaFile( pMetaFile, long(dNewWidth + 0.5), long(dNewHeight + 0.5), pAction->BackColor, pAction->Type, pAction->CropZoom, pAction->BackAlpha, nSrcX, nSrcY, nSrcW, nSrcH );
|
||
if( bResult )
|
||
m_oSources.UpdateMetafile( pAction->SourceId );
|
||
|
||
return bResult;
|
||
|
||
}
|
||
|
||
IUnknown* pResult = NULL;
|
||
|
||
int nResult = Core::COM::COM_TransformResizeMedia( m_oSources.Get( pAction->SourceId ), &pResult, long(dNewWidth + 0.5), long(dNewHeight + 0.5), pAction->BackColor, pAction->Type, pAction->CropZoom, pAction->BackAlpha, nSrcX, nSrcY, nSrcW, nSrcH );
|
||
|
||
if( pResult )
|
||
{
|
||
m_oSources.Set( 0, pResult );
|
||
}
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
|
||
BOOL Process_Transform_Twirl(ImageStudio::Serialize::Effects::TransformTwirl* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
dx9::EffectTwirl twirl;
|
||
twirl.m_dAngle = pAction->Angle;
|
||
twirl.m_dDegree = pAction->Degree;
|
||
twirl.m_dZoom = pAction->Zoom;
|
||
twirl.m_nBackColor = dx9::GetColor( pAction->BackColor, pAction->BackAlpha );
|
||
|
||
int nRetCode = UpdateVideoEffect( &twirl, pAction->SourceId, dCompleteness, pAction->bUseVideoCard );
|
||
if( nRetCode != 0 )
|
||
return nRetCode;
|
||
|
||
int nResult = Core::COM::COM_TransformTwirl( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->Angle, pAction->Degree, pAction->Zoom, pAction->BackColor, pAction->BackAlpha );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Transform_Sphere(ImageStudio::Serialize::Effects::TransformSphere* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
dx9::EffectSphere sphere;
|
||
sphere.m_dCenterX = pAction->CenterX;
|
||
sphere.m_dCenterY = pAction->CenterY;
|
||
sphere.m_dRadiusX = pAction->RadiusX;
|
||
sphere.m_dRadiusY = pAction->RadiusY;
|
||
sphere.m_dDegree = pAction->Degree;
|
||
sphere.m_nMetric = pAction->Metric;
|
||
sphere.m_nBackColor = dx9::GetColor( pAction->BackColor, pAction->BackAlpha );
|
||
|
||
int nRetCode = UpdateVideoEffect( &sphere, pAction->SourceId, dCompleteness, pAction->bUseVideoCard );
|
||
if( nRetCode != 0 )
|
||
return nRetCode;
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !GetMetricMultiplier( m_oSources.Get( pAction->SourceId ), pAction->Metric, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
// <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
double dCenterX = pAction->CenterX * dMetricX;
|
||
double dCenterY = pAction->CenterY * dMetricY;
|
||
double dRadiusX = pAction->RadiusX * dMetricX;
|
||
double dRadiusY = pAction->RadiusY * dMetricY;
|
||
double dAngle = pAction->Degree;
|
||
|
||
dCenterX += dCenterX > 0 ? 0.5 : -0.5;
|
||
dCenterY += dCenterY > 0 ? 0.5 : -0.5;
|
||
dRadiusX += dRadiusX > 0 ? 0.5 : -0.5;
|
||
dRadiusY += dRadiusY > 0 ? 0.5 : -0.5;
|
||
|
||
int nResult = Core::COM::COM_TransformSphere( m_oSources.Get( pAction->SourceId ), dCompleteness, long(dCenterX), long(dCenterY), long(dRadiusX), long(dRadiusY), dAngle, pAction->BackColor, pAction->BackAlpha );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Transform_Cylinder(ImageStudio::Serialize::Effects::TransformCylinder* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
dx9::EffectCylinder cylinder;
|
||
cylinder.m_dCenter = pAction->Center;
|
||
cylinder.m_dRadius = pAction->Radius;
|
||
cylinder.m_dDegree = pAction->Degree;
|
||
cylinder.m_nMetric = pAction->Metric;
|
||
cylinder.m_bVertical = pAction->Type == c_nTransformCylinderVert ? TRUE : FALSE;
|
||
cylinder.m_nBackColor = dx9::GetColor( pAction->BackColor, pAction->BackAlpha );
|
||
|
||
int nRetCode = UpdateVideoEffect( &cylinder, pAction->SourceId, dCompleteness, pAction->bUseVideoCard );
|
||
if( nRetCode != 0 )
|
||
return nRetCode;
|
||
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !GetMetricMultiplier( m_oSources.Get( pAction->SourceId ), pAction->Metric, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
// <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
double dMetric;
|
||
int nType = pAction->Type;
|
||
|
||
if( nType == c_nTransformCylinderVert )
|
||
{
|
||
dMetric = dMetricX;
|
||
}
|
||
else
|
||
{
|
||
dMetric = dMetricY;
|
||
nType = c_nTransformCylinderHoriz;
|
||
}
|
||
|
||
double dCenter = pAction->Center * dMetric;
|
||
double dRadius = pAction->Radius * dMetric;
|
||
double dAngle = pAction->Degree;
|
||
|
||
dCenter += dCenter > 0 ? 0.5 : -0.5;
|
||
dRadius += dRadius > 0 ? 0.5 : -0.5;
|
||
|
||
int nResult = Core::COM::COM_TransformCylinder( m_oSources.Get( pAction->SourceId ), dCompleteness, long(dCenter), long(dRadius), dAngle, nType, pAction->BackColor, pAction->BackAlpha );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Transform_Wave(ImageStudio::Serialize::Effects::TransformWave* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if( dCompleteness < 0.0001 )
|
||
return TRUE;
|
||
|
||
BOOL bVertical = pAction->bVertical != 0 ? TRUE : FALSE;
|
||
double dPhase = pAction->dNumPeaks * IPP_2PI;
|
||
double dPhaseOffset = pAction->dPeakOffset + pAction->dSpeed * pAction->GetRelativeTime( m_dTime ) / 1000;
|
||
|
||
dPhaseOffset -= int(dPhaseOffset);
|
||
dPhaseOffset *= IPP_2PI;
|
||
|
||
|
||
dx9::EffectWave wave;
|
||
wave.m_dAmplitude = pAction->dAmplitude;
|
||
wave.m_dPhase = dPhase;
|
||
wave.m_dOffset = dPhaseOffset;
|
||
wave.m_nMetric = pAction->nMetric;
|
||
wave.m_bVertical = bVertical;
|
||
|
||
int nRetCode = UpdateVideoEffect( &wave, pAction->SourceId, dCompleteness, pAction->bUseVideoCard );
|
||
if( nRetCode != 0 )
|
||
return nRetCode;
|
||
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !GetMetricMultiplier( m_oSources.Get( pAction->SourceId ), pAction->nMetric, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
double dAmplitude = pAction->dAmplitude * dCompleteness * (bVertical ? dMetricX : dMetricY);
|
||
|
||
int nResult = Core::COM::COM_TransformWave( m_oSources.Get( pAction->SourceId ), dPhase, dPhaseOffset, dAmplitude, bVertical );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Transform_Ripple(ImageStudio::Serialize::Effects::TransformRipple* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if( dCompleteness < 0.0001 )
|
||
return TRUE;
|
||
|
||
double dOmega = pAction->dOmega;
|
||
double dOffset = pAction->dOffset * dCompleteness + pAction->dSpeed * pAction->GetRelativeTime( m_dTime );
|
||
if( pAction->bRevers )
|
||
dOffset *= -1;
|
||
|
||
dx9::EffectRipple ripple;
|
||
ripple.m_dOmega = dOmega;
|
||
ripple.m_dOffset = dOffset;
|
||
|
||
int nRetCode = UpdateVideoEffect( &ripple, pAction->SourceId, dCompleteness, pAction->bUseVideoCard );
|
||
if( nRetCode != 0 )
|
||
return nRetCode;
|
||
|
||
int nResult = Core::COM::COM_TransformRipple( m_oSources.Get( pAction->SourceId ), dOmega, dOffset, dCompleteness );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Transform_RotateSpecial(ImageStudio::Serialize::Effects::TransformRotateSpecial* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if( dCompleteness < 0.0001 )
|
||
return TRUE;
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !GetMetricMultiplier( m_oSources.Get( pAction->SourceId ), pAction->nMetric, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
int nAngle = int(pAction->dAngle + 0.5) % 360;
|
||
if( nAngle < 0 )
|
||
nAngle += 360;
|
||
|
||
|
||
if( nAngle < 90 ) nAngle = 0;
|
||
else if( nAngle < 180 ) nAngle = 90;
|
||
else if( nAngle < 270 ) nAngle = 180;
|
||
else if( nAngle < 360 ) nAngle = 270;
|
||
|
||
double dLeft = pAction->dLeft * dMetricX;
|
||
double dTop = pAction->dTop * dMetricY;
|
||
double dWidth = pAction->dWidth * dMetricX;
|
||
double dHeight = pAction->dHeight * dMetricY;
|
||
|
||
BYTE* pSource = NULL;
|
||
int nWidth = 0;
|
||
int nHeight = 0;
|
||
|
||
int nStatus = Core::COM::COM_GetBGRAImageFromInterface( m_oSources.Get( pAction->SourceId ), pSource, nWidth, nHeight );
|
||
if (nStatus != Core::c_nErrorNone)
|
||
return FALSE;
|
||
|
||
MediaCore::IAVSUncompressedVideoFrame* pSourceFrame = m_oSources.Get( pAction->SourceId );
|
||
|
||
long lAspectX = 0;
|
||
long lAspectY = 0;
|
||
long lColorSpace = 0;
|
||
pSourceFrame->get_AspectRatioX( &lAspectX );
|
||
pSourceFrame->get_AspectRatioY( &lAspectY );
|
||
pSourceFrame->get_ColorSpace( &lColorSpace );
|
||
|
||
if( !lAspectX || !lAspectY )
|
||
{
|
||
lAspectX = 1;
|
||
lAspectY = 1;
|
||
}
|
||
|
||
double dFactorX = nWidth * lAspectY / double(nHeight * lAspectX);
|
||
double dFactorY = 1;
|
||
|
||
long lResultWidth = int(dWidth);
|
||
long lResultHeight = int(dHeight);
|
||
|
||
if( lResultWidth < 1 )
|
||
lResultWidth = 1;
|
||
|
||
if( lResultHeight < 1 )
|
||
lResultHeight = 1;
|
||
|
||
MediaCore::IAVSUncompressedVideoFrame* pResultFrame = NULL;
|
||
::CoCreateInstance( MediaCore::CLSID_CAVSUncompressedVideoFrame, NULL, CLSCTX_INPROC, MediaCore::IID_IAVSUncompressedVideoFrame, (void**)&pResultFrame );
|
||
if( !pResultFrame )
|
||
return FALSE;
|
||
|
||
pResultFrame->AllocateBuffer( lResultWidth * lResultHeight * 4 );
|
||
|
||
BYTE* pResult = NULL;
|
||
pResultFrame->get_Buffer( &pResult );
|
||
if( !pResult )
|
||
{
|
||
pResultFrame->Release();
|
||
return FALSE;
|
||
}
|
||
|
||
pResultFrame->put_Width( lResultWidth );
|
||
pResultFrame->put_Height( lResultHeight );
|
||
pResultFrame->put_ColorSpace( lColorSpace );
|
||
pResultFrame->put_Stride( 0, lResultWidth * 4 );
|
||
pResultFrame->put_AspectRatioX( lResultWidth );
|
||
pResultFrame->put_AspectRatioY( lResultHeight );
|
||
|
||
Ipp8u color[4] = {0, 0, 0, 255};
|
||
IppiSize ResultSize = {lResultWidth, lResultHeight};
|
||
|
||
ippiSet_8u_C4R( color, pResult, lResultWidth*4, ResultSize );
|
||
|
||
double dResultCenterX = lResultWidth / 2.0 + dLeft;
|
||
double dResultCenterY = lResultHeight / 2.0 + dTop;
|
||
|
||
double dScale = pAction->dScale;
|
||
|
||
Core::COM::COM_Rotate( pSourceFrame, pResultFrame, dResultCenterX, dResultCenterY, nAngle, dScale * dFactorX, dScale * dFactorY, 255, 1 );
|
||
|
||
m_oSources.Set( 0, pResultFrame );
|
||
|
||
return TRUE;
|
||
}
|
||
BOOL Process_Transform_Linear(ImageStudio::Serialize::Effects::TransformLinear* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if( dCompleteness < 0.0001 )
|
||
return TRUE;
|
||
|
||
IUnknown* pSrcFrame = m_oSources.Get( pAction->SourceId );
|
||
IUnknown* pDstFrame = 0;
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !GetMetricMultiplier( pSrcFrame, pAction->nMetric, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
int nResult = Core::COM::COM_TransformLinear(
|
||
pSrcFrame, &pDstFrame,
|
||
dCompleteness,
|
||
pAction->dAngle,
|
||
pAction->dScaleX,
|
||
pAction->dScaleY,
|
||
pAction->dShiftX * dMetricX,
|
||
pAction->dShiftY * dMetricY,
|
||
pAction->nBackColor, pAction->nBackAlpha );
|
||
|
||
if( Core::c_nErrorNone != nResult )
|
||
return FALSE;
|
||
|
||
m_oSources.Set( pAction->SourceId, pDstFrame );
|
||
|
||
return TRUE;
|
||
}
|
||
BOOL Process_Transform_GlassTile(ImageStudio::Serialize::Effects::TransformGlassTile* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if( dCompleteness < 0.0001 )
|
||
return TRUE;
|
||
|
||
|
||
IMediaFrame* pSrcFrame = m_oSources.Get( pAction->SourceId );
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !GetMetricMultiplier( pSrcFrame, pAction->nMetric, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
int nSize = int(pAction->dSize * dMetricX + 0.5);
|
||
|
||
int nResult = Core::COM::COM_TransformGlassTile( pSrcFrame, nSize, dCompleteness );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Transform_BrokenGlass(ImageStudio::Serialize::Effects::TransformBrokenGlass* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if( dCompleteness < 0.0001 )
|
||
return TRUE;
|
||
|
||
|
||
IMediaFrame* pSrcFrame = m_oSources.Get( pAction->SourceId );
|
||
|
||
int nResult = Core::COM::COM_TransformBrokenGlass( pSrcFrame, pAction->nDebris, dCompleteness );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
|
||
BOOL Process_Filter_Prewitt(ImageStudio::Serialize::Effects::FilterPrewitt* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_FilterPrewitt( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->Type );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Filter_Scharr(ImageStudio::Serialize::Effects::FilterScharr* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_FilterScharr( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->Type );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Filter_Sobel(ImageStudio::Serialize::Effects::FilterSobel* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_FilterSobel( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->Type, pAction->Extended );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
|
||
BOOL Process_Filter_Roberts(ImageStudio::Serialize::Effects::FilterRoberts* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_FilterRoberts( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->Type );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Filter_Laplace(ImageStudio::Serialize::Effects::FilterLaplace* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_FilterLaplace( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->Type );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Filter_Hipass(ImageStudio::Serialize::Effects::FilterHipass* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_FilterHipass( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->Type );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Filter_Lowpass(ImageStudio::Serialize::Effects::FilterLowpass* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_FilterLowpass( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->Type );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Filter_Blur(ImageStudio::Serialize::Effects::FilterBlur* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_FilterBlur( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->Type );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Filter_Canny(ImageStudio::Serialize::Effects::FilterCanny* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_FilterCanny( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->LevelLow, pAction->LevelHigh );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
|
||
BOOL Process_File_LoadImage(ImageStudio::Serialize::File::FileLoadImage* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
IUnknown* pResult = NULL;
|
||
|
||
IO::CMetaFile* pMetaFile = NULL;
|
||
|
||
Core::COM::COM_LoadImage( &pResult, pAction->SourcePath, pAction->nFrame, pAction->bVerFlip, &pMetaFile );
|
||
|
||
if( pMetaFile )
|
||
return m_oSources.SetMetafile( 0, pMetaFile );
|
||
|
||
m_oSources.Set( 0, pResult );
|
||
|
||
return m_oSources.IsValidSource( 0 );
|
||
}
|
||
|
||
BOOL Process_File_LoadRaw(ImageStudio::Serialize::File::FileLoadRaw* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> XML
|
||
pAction->XMLToString();
|
||
|
||
IUnknown* pResult = NULL;
|
||
|
||
Core::COM::COM_LoadRaw( &pResult, pAction->SourcePath, pAction->bVerFlip, pAction->strSettingXML );
|
||
|
||
m_oSources.Set( 0, pResult );
|
||
|
||
return m_oSources.IsValidSource( 0 );
|
||
}
|
||
|
||
BOOL Process_File_LoadScreenshot(ImageStudio::Serialize::File::FileLoadScreenshot* pAction)
|
||
{
|
||
m_oSources.Clear( 0 );
|
||
|
||
BOOL bReturnCode = FALSE;
|
||
|
||
HDC hdcScreen = CreateDC(_T("DISPLAY"), NULL, NULL, NULL);
|
||
HDC hdcCompatible = CreateCompatibleDC(hdcScreen);
|
||
|
||
// compute screen size
|
||
int nWidth = GetDeviceCaps(hdcScreen, HORZRES);
|
||
int nHeight = GetDeviceCaps(hdcScreen, VERTRES);
|
||
|
||
// create a compatible bitmap for hdcScreen.
|
||
HBITMAP hbmScreen = CreateCompatibleBitmap(hdcScreen, nWidth, nHeight);
|
||
if( hbmScreen )
|
||
{
|
||
// select the bitmaps into the compatible DC
|
||
HGDIOBJ hObject = SelectObject(hdcCompatible, hbmScreen);
|
||
|
||
// copy color data for the entire display into a bitmap that is selected into a compatible DC.
|
||
if( BitBlt(hdcCompatible, 0, 0, nWidth, nHeight, hdcScreen, 0, 0, SRCCOPY) )
|
||
{
|
||
// create pixel array
|
||
BYTE* pPixels = new BYTE[4*nWidth*nHeight];
|
||
if( pPixels )
|
||
{
|
||
// compose bitmap info
|
||
BITMAPINFO info;
|
||
info.bmiHeader.biBitCount = 32;
|
||
info.bmiHeader.biClrImportant = 0;
|
||
info.bmiHeader.biClrUsed = 0;
|
||
info.bmiHeader.biCompression = BI_RGB;
|
||
info.bmiHeader.biHeight = -nHeight;
|
||
info.bmiHeader.biPlanes = 1;
|
||
info.bmiHeader.biSize = sizeof(BITMAPINFO);
|
||
info.bmiHeader.biSizeImage = 4*nWidth*nHeight;
|
||
info.bmiHeader.biWidth = nWidth;
|
||
info.bmiHeader.biXPelsPerMeter = 0;
|
||
info.bmiHeader.biYPelsPerMeter = 0;
|
||
|
||
// extract pixels from HBITMAP
|
||
if( nHeight == ::GetDIBits(hdcCompatible, hbmScreen, 0, nHeight, pPixels, &info, DIB_RGB_COLORS))
|
||
{
|
||
IUnknown* pResult = NULL;
|
||
|
||
bReturnCode = ImageStudioUtils::ByteArrayToMediaData( pPixels, nWidth, nHeight, &pResult, FALSE );
|
||
|
||
m_oSources.Set( 0, pResult );
|
||
}
|
||
|
||
delete [] pPixels;
|
||
}
|
||
}
|
||
|
||
// delete objects
|
||
DeleteObject(hbmScreen);
|
||
}
|
||
|
||
DeleteDC(hdcCompatible);
|
||
DeleteDC(hdcScreen);
|
||
|
||
return bReturnCode;
|
||
}
|
||
BOOL Process_File_SaveAsBmp(ImageStudio::Serialize::File::FileSaveAsBmp* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
ImageStudio::Core::Image oImage;
|
||
|
||
if (!oImage.FromMediaData( m_oSources.Get( pAction->SourceId ), FALSE))
|
||
return FALSE;
|
||
|
||
ImageStudio::IO::Bitmap oWriter;
|
||
|
||
return oWriter.ToFile(&oImage, pAction->DestinationPath, pAction->Format);
|
||
}
|
||
BOOL Process_File_SaveAsGif(ImageStudio::Serialize::File::FileSaveAsGif* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
ImageStudio::Core::Image oImage;
|
||
|
||
if (!oImage.FromMediaData( m_oSources.Get( pAction->SourceId ), FALSE))
|
||
return FALSE;
|
||
|
||
ImageStudio::IO::Gif oWriter;
|
||
|
||
return oWriter.ToFile(&oImage, pAction->DestinationPath, pAction->Format);
|
||
}
|
||
BOOL Process_File_SaveAsJpeg(ImageStudio::Serialize::File::FileSaveAsJpeg* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
ULONG nQuality = max(0, min(100, pAction->Quality));
|
||
|
||
EncoderParameters oSettings;
|
||
|
||
oSettings.Count = 1;
|
||
oSettings.Parameter[0].Guid = EncoderQuality;
|
||
oSettings.Parameter[0].Type = EncoderParameterValueTypeLong;
|
||
oSettings.Parameter[0].NumberOfValues = 1;
|
||
oSettings.Parameter[0].Value = &nQuality;
|
||
|
||
return SaveAsGdiplus( pAction->SourceId, pAction->DestinationPath, ImageCLSID::CLSID_Jpg, &oSettings, pAction->dpi,pAction->MetaDataXML );
|
||
}
|
||
|
||
BOOL Process_File_SaveAsPng(ImageStudio::Serialize::File::FileSaveAsPng* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
return SaveAsGdiplus( pAction->SourceId, pAction->DestinationPath, ImageCLSID::CLSID_Png, NULL, pAction->dpi/*,pAction->MetaDataXML*/);
|
||
}
|
||
BOOL Process_File_SaveAsTiff(ImageStudio::Serialize::File::FileSaveAsTiff* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
ImageStudio::Core::Image oImage;
|
||
|
||
if (!oImage.FromMediaData( m_oSources.Get( pAction->SourceId ), FALSE))
|
||
return FALSE;
|
||
|
||
ImageStudio::IO::Tiff oWriter;
|
||
|
||
return oWriter.ToFile(&oImage, pAction->DestinationPath, pAction->Format, pAction->Compression/*,pAction->MetaDataXML*/);
|
||
}
|
||
BOOL Process_File_SaveAsWmf(ImageStudio::Serialize::File::FileSaveAsWmf* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
int nResult = Core::COM::COM_SaveImageAsMetafile( m_oSources.Get( pAction->SourceId ), pAction->DestinationPath, FALSE );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_File_SaveAsEmf(ImageStudio::Serialize::File::FileSaveAsEmf* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
int nResult = Core::COM::COM_SaveImageAsMetafile( m_oSources.Get( pAction->SourceId ), pAction->DestinationPath, TRUE );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_File_SaveAsPcx(ImageStudio::Serialize::File::FileSaveAsPcx* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
ImageStudio::Core::Image oImage;
|
||
|
||
if (!oImage.FromMediaData( m_oSources.Get( pAction->SourceId ), FALSE))
|
||
return FALSE;
|
||
|
||
oImage.RotateFlip( Gdiplus::RotateNoneFlipY );
|
||
|
||
int nFileFormat = pAction->Format;
|
||
if( ImageStudio::IO::c_nFormat_Uncompressed_24bpp == nFileFormat )
|
||
{
|
||
nFileFormat = ImageStudio::IO::c_nFormat_Uncompressed_32bpp;
|
||
}
|
||
|
||
ImageStudio::IO::Pcx oWriter;
|
||
|
||
return oWriter.ToFile(&oImage, pAction->DestinationPath, nFileFormat);
|
||
}
|
||
BOOL Process_File_SaveAsTga(ImageStudio::Serialize::File::FileSaveAsTga* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
ImageStudio::Core::Image oImage;
|
||
|
||
if (!oImage.FromMediaData( m_oSources.Get( pAction->SourceId ), FALSE))
|
||
return FALSE;
|
||
|
||
oImage.RotateFlip( Gdiplus::RotateNoneFlipY );
|
||
|
||
int nFileFormat = pAction->Format;
|
||
if( ImageStudio::IO::c_nFormat_Uncompressed_24bpp == nFileFormat )
|
||
{
|
||
nFileFormat = ImageStudio::IO::c_nFormat_Uncompressed_32bpp;
|
||
}
|
||
|
||
ImageStudio::IO::Tga oWriter;
|
||
|
||
return oWriter.ToFile(&oImage, pAction->DestinationPath, nFileFormat);
|
||
}
|
||
BOOL Process_File_SaveAsRas(ImageStudio::Serialize::File::FileSaveAsRas* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
ImageStudio::Core::Image oImage;
|
||
|
||
if (!oImage.FromMediaData( m_oSources.Get( pAction->SourceId ), FALSE))
|
||
return FALSE;
|
||
|
||
oImage.RotateFlip( Gdiplus::RotateNoneFlipY );
|
||
|
||
int nFileFormat = pAction->Format;
|
||
if( ImageStudio::IO::c_nFormat_Uncompressed_24bpp == nFileFormat )
|
||
{
|
||
nFileFormat = ImageStudio::IO::c_nFormat_Uncompressed_32bpp;
|
||
}
|
||
|
||
ImageStudio::IO::Ras oWriter;
|
||
|
||
return oWriter.ToFile(&oImage, pAction->DestinationPath, nFileFormat);
|
||
}
|
||
BOOL Process_File_SaveAsIPod(ImageStudio::Serialize::File::FileSaveAsIPod* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
ImageStudio::Core::Image oImage;
|
||
|
||
if (!oImage.FromMediaData( m_oSources.Get( pAction->SourceId ), FALSE))
|
||
return FALSE;
|
||
|
||
ImageStudio::IO::IPod oWriter;
|
||
|
||
return oWriter.ToFile(&oImage, pAction->DestinationPath, pAction->Format);
|
||
}
|
||
BOOL Process_File_SaveAsPsd(ImageStudio::Serialize::File::FileSaveAsPsd* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
ImageStudio::Core::Image oImage;
|
||
|
||
if (!oImage.FromMediaData( m_oSources.Get( pAction->SourceId ), FALSE))
|
||
return FALSE;
|
||
|
||
oImage.RotateFlip( Gdiplus::RotateNoneFlipY );
|
||
|
||
int nFileFormat = pAction->Format;
|
||
if( ImageStudio::IO::c_nFormat_Uncompressed_24bpp == nFileFormat )
|
||
{
|
||
nFileFormat = ImageStudio::IO::c_nFormat_Uncompressed_32bpp;
|
||
}
|
||
|
||
ImageStudio::IO::Psd oWriter;
|
||
|
||
return oWriter.ToFile(&oImage, pAction->DestinationPath, nFileFormat);
|
||
}
|
||
BOOL Process_File_SaveAsJp2(ImageStudio::Serialize::File::FileSaveAsJp2* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
ImageStudio::Core::Image oImage;
|
||
|
||
if (!oImage.FromMediaData( m_oSources.Get( pAction->SourceId ), FALSE))
|
||
return FALSE;
|
||
|
||
oImage.RotateFlip( Gdiplus::RotateNoneFlipY );
|
||
|
||
int nFileFormat = pAction->nFormat;
|
||
if( ImageStudio::IO::c_nFormat_Uncompressed_24bpp == nFileFormat )
|
||
{
|
||
nFileFormat = ImageStudio::IO::c_nFormat_Uncompressed_32bpp;
|
||
}
|
||
|
||
ImageStudio::IO::Jp2 oWriter;
|
||
|
||
return oWriter.ToFile( &oImage, pAction->sDestinationPath, nFileFormat, pAction->bJp2, pAction->bLossLess, pAction->nQuality, pAction->nFileSize );
|
||
}
|
||
|
||
|
||
BOOL Process_Paint_SetPen(ImageStudio::Serialize::Paint::Common::SetPen* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
m_oPaintSettings.SetPen(pAction->Pen);
|
||
|
||
return TRUE;
|
||
}
|
||
BOOL Process_Paint_SetBrush(ImageStudio::Serialize::Paint::Common::SetBrush* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
m_oPaintSettings.SetBrush(pAction->Brush, TRUE);
|
||
|
||
return TRUE;
|
||
}
|
||
BOOL Process_Paint_SetFont(ImageStudio::Serialize::Paint::Common::SetFont* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
m_oPaintSettings.SetFont(pAction->Font);
|
||
|
||
return TRUE;
|
||
}
|
||
BOOL Process_Paint_SetFormat(ImageStudio::Serialize::Paint::Common::SetFormat* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
m_oPaintSettings.SetFormat(pAction->Format);
|
||
|
||
return TRUE;
|
||
}
|
||
BOOL Process_Paint_DrawLine(ImageStudio::Serialize::Paint::Common::DrawLine* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
Gdiplus::Bitmap* pBitmap = m_oSources.GetBitmap( pAction->SourceId );
|
||
if( !pBitmap )
|
||
return FALSE;
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !GetMetricMultiplier( pBitmap, pAction->Metric, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
m_oPaintSettings.SaveState();
|
||
m_oPaintSettings.SetPen(pAction->Pen);
|
||
|
||
Painter::CPen& oPen = m_oPaintSettings.GetPen();
|
||
oPen.ScaleAlpha( dCompleteness );
|
||
if( pAction->Pen.IsUseMetric() )
|
||
oPen.Size *= dMetricX;
|
||
|
||
double dX1 = dMetricX * pAction->X1;
|
||
double dY1 = dMetricY * pAction->Y1;
|
||
double dX2 = dMetricX * pAction->X2;
|
||
double dY2 = dMetricY * pAction->Y2;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
Gdiplus::Graphics oRender( pBitmap );
|
||
if( Gdiplus::Ok != oRender.GetLastStatus() )
|
||
return FALSE;
|
||
|
||
int nResult = Core::GDIPLUS::GDIPLUS_DrawLine( &oRender, m_oPaintSettings, dX1, dY1, dX2, dY2);
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
m_oPaintSettings.RestoreState();
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Paint_DrawRectangle(ImageStudio::Serialize::Paint::Common::DrawRectangle* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.000001)
|
||
return TRUE;
|
||
|
||
Gdiplus::Bitmap* pBitmap = m_oSources.GetBitmap( pAction->SourceId );
|
||
if( !pBitmap )
|
||
return FALSE;
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !GetMetricMultiplier( pBitmap, pAction->Metric, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
m_oPaintSettings.SaveState();
|
||
m_oPaintSettings.SetPen(pAction->Pen);
|
||
m_oPaintSettings.SetBrush(pAction->Brush, FALSE);
|
||
|
||
Painter::CPen& oPen = m_oPaintSettings.GetPen();
|
||
oPen.ScaleAlpha( dCompleteness );
|
||
if( pAction->Pen.IsUseMetric() )
|
||
oPen.Size *= dMetricX;
|
||
|
||
Painter::CBrush& oBrush = m_oPaintSettings.GetBrush();
|
||
oBrush.ScaleAlpha1( dCompleteness );
|
||
oBrush.ScaleAlpha2( dCompleteness );
|
||
oBrush.ScaleTextureAlpha( dCompleteness );
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
int nResult = Core::c_nErrorNone;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
double dLeft = pAction->Left * dMetricX;
|
||
double dTop = pAction->Top * dMetricY;
|
||
double dRight = pAction->Right * dMetricX;
|
||
double dBottom = pAction->Bottom * dMetricY;
|
||
|
||
Gdiplus::Graphics oRender( pBitmap );
|
||
if( Gdiplus::Ok != oRender.GetLastStatus() )
|
||
return FALSE;
|
||
|
||
if (pAction->Solid)
|
||
nResult = Core::GDIPLUS::GDIPLUS_FillRectangle( &oRender, m_oPaintSettings, dLeft, dTop, dRight, dBottom);
|
||
else
|
||
nResult = Core::GDIPLUS::GDIPLUS_DrawRectangle( &oRender, m_oPaintSettings, dLeft, dTop, dRight, dBottom);
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
m_oPaintSettings.RestoreState();
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Paint_DrawEllipse(ImageStudio::Serialize::Paint::Common::DrawEllipse* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
Gdiplus::Bitmap* pBitmap = m_oSources.GetBitmap( pAction->SourceId );
|
||
if( !pBitmap )
|
||
return FALSE;
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !GetMetricMultiplier( pBitmap, pAction->Metric, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
m_oPaintSettings.SaveState();
|
||
m_oPaintSettings.SetPen(pAction->Pen);
|
||
m_oPaintSettings.SetBrush(pAction->Brush, FALSE);
|
||
|
||
Painter::CPen& oPen = m_oPaintSettings.GetPen();
|
||
oPen.ScaleAlpha( dCompleteness );
|
||
if( pAction->Pen.IsUseMetric() )
|
||
oPen.Size *= dMetricX;
|
||
|
||
Painter::CBrush& oBrush = m_oPaintSettings.GetBrush();
|
||
oBrush.ScaleAlpha1( dCompleteness );
|
||
oBrush.ScaleAlpha2( dCompleteness );
|
||
oBrush.ScaleTextureAlpha( dCompleteness );
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
double dLeft = pAction->Left * dMetricX;
|
||
double dTop = pAction->Top * dMetricY;
|
||
double dRight = pAction->Right * dMetricX;
|
||
double dBottom = pAction->Bottom * dMetricY;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
int nResult = Core::c_nErrorNone;
|
||
|
||
Gdiplus::Graphics oRender( pBitmap );
|
||
if( Gdiplus::Ok != oRender.GetLastStatus() )
|
||
return FALSE;
|
||
|
||
if (pAction->Solid)
|
||
nResult = Core::GDIPLUS::GDIPLUS_FillEllipse( &oRender, m_oPaintSettings, dLeft, dTop, dRight, dBottom);
|
||
else
|
||
nResult = Core::GDIPLUS::GDIPLUS_DrawEllipse( &oRender, m_oPaintSettings, dLeft, dTop, dRight, dBottom);
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
m_oPaintSettings.RestoreState();
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Paint_DrawInvRectangle(ImageStudio::Serialize::Paint::Common::DrawInvRectangle* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
Gdiplus::Bitmap* pBitmap = m_oSources.GetBitmap( pAction->SourceId );
|
||
if( !pBitmap )
|
||
return FALSE;
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !GetMetricMultiplier( pBitmap, pAction->Metric, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
m_oPaintSettings.SaveState();
|
||
m_oPaintSettings.SetBrush(pAction->Brush, FALSE);
|
||
|
||
Painter::CBrush& oBrush = m_oPaintSettings.GetBrush();
|
||
oBrush.ScaleAlpha1( dCompleteness );
|
||
oBrush.ScaleAlpha2( dCompleteness );
|
||
oBrush.ScaleTextureAlpha( dCompleteness );
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
double dLeft = pAction->Left * dMetricX;
|
||
double dTop = pAction->Top * dMetricY;
|
||
double dRight = pAction->Right * dMetricX;
|
||
double dBottom = pAction->Bottom * dMetricY;
|
||
|
||
Gdiplus::Graphics oRender( pBitmap );
|
||
if( Gdiplus::Ok != oRender.GetLastStatus() )
|
||
return FALSE;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
Gdiplus::RectF oRectImage(-1.0f, -1.0f, (float)pBitmap->GetWidth() + 2.0f, (float)pBitmap->GetHeight() + 2.0f); // <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> rect <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
|
||
int nResult = Core::GDIPLUS::GDIPLUS_FillInverseRectangle( &oRender, m_oPaintSettings, oRectImage, dLeft, dTop, dRight, dBottom);
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
m_oPaintSettings.RestoreState();
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Paint_DrawInvEllipse(ImageStudio::Serialize::Paint::Common::DrawInvEllipse* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
Gdiplus::Bitmap* pBitmap = m_oSources.GetBitmap( pAction->SourceId );
|
||
if( !pBitmap )
|
||
return FALSE;
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !GetMetricMultiplier( pBitmap, pAction->Metric, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
m_oPaintSettings.SaveState();
|
||
m_oPaintSettings.SetBrush(pAction->Brush, FALSE);
|
||
|
||
Painter::CBrush& oBrush = m_oPaintSettings.GetBrush();
|
||
oBrush.ScaleAlpha1( dCompleteness );
|
||
oBrush.ScaleAlpha2( dCompleteness );
|
||
oBrush.ScaleTextureAlpha( dCompleteness );
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
double dLeft = pAction->Left * dMetricX;
|
||
double dTop = pAction->Top * dMetricY;
|
||
double dRight = pAction->Right * dMetricX;
|
||
double dBottom = pAction->Bottom * dMetricY;
|
||
|
||
Gdiplus::Graphics oRender( pBitmap );
|
||
if( Gdiplus::Ok != oRender.GetLastStatus() )
|
||
return FALSE;
|
||
|
||
Gdiplus::RectF oRectImage(-1.0f, -1.0f, (float)pBitmap->GetWidth() + 2.0f, (float)pBitmap->GetHeight() + 2.0f); // <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> rect <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
int nResult = Core::GDIPLUS::GDIPLUS_FillInverseEllipse( &oRender, m_oPaintSettings, oRectImage, dLeft, dTop, dRight, dBottom);
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
m_oPaintSettings.RestoreState();
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Paint_DrawPie(ImageStudio::Serialize::Paint::Common::DrawPie* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
Gdiplus::Bitmap* pBitmap = m_oSources.GetBitmap( pAction->SourceId );
|
||
if( !pBitmap )
|
||
return FALSE;
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !GetMetricMultiplier( pBitmap, pAction->Metric, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
m_oPaintSettings.SaveState();
|
||
m_oPaintSettings.SetPen(pAction->Pen);
|
||
m_oPaintSettings.SetBrush(pAction->Brush, FALSE);
|
||
|
||
Painter::CPen& oPen = m_oPaintSettings.GetPen();
|
||
oPen.ScaleAlpha( dCompleteness );
|
||
if( pAction->Pen.IsUseMetric() )
|
||
oPen.Size *= dMetricX;
|
||
|
||
Painter::CBrush& oBrush = m_oPaintSettings.GetBrush();
|
||
oBrush.ScaleAlpha1( dCompleteness );
|
||
oBrush.ScaleAlpha2( dCompleteness );
|
||
oBrush.ScaleTextureAlpha( dCompleteness );
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
double dLeft = pAction->Left * dMetricX;
|
||
double dTop = pAction->Top * dMetricY;
|
||
double dRight = pAction->Right * dMetricX;
|
||
double dBottom = pAction->Bottom * dMetricY;
|
||
double dStartAngle = pAction->StartAngle;
|
||
double dSweepAngle = pAction->SweepAngle;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
int nResult = Core::c_nErrorNone;
|
||
|
||
Gdiplus::Graphics oRender( pBitmap );
|
||
if( Gdiplus::Ok != oRender.GetLastStatus() )
|
||
return FALSE;
|
||
|
||
if (pAction->Solid)
|
||
nResult = Core::GDIPLUS::GDIPLUS_FillPie( &oRender, m_oPaintSettings, dLeft, dTop, dRight, dBottom, dStartAngle, dSweepAngle);
|
||
else
|
||
nResult = Core::GDIPLUS::GDIPLUS_DrawPie( &oRender, m_oPaintSettings, dLeft, dTop, dRight, dBottom, dStartAngle, dSweepAngle);
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
m_oPaintSettings.RestoreState();
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Paint_DrawSector(ImageStudio::Serialize::Paint::Common::DrawSector* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
Gdiplus::Bitmap* pBitmap = m_oSources.GetBitmap( pAction->SourceId );
|
||
if( !pBitmap )
|
||
return FALSE;
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !GetMetricMultiplier( pBitmap, pAction->Metric, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
m_oPaintSettings.SaveState();
|
||
m_oPaintSettings.SetPen(pAction->Pen);
|
||
m_oPaintSettings.SetBrush(pAction->Brush, FALSE);
|
||
|
||
Painter::CPen& oPen = m_oPaintSettings.GetPen();
|
||
oPen.ScaleAlpha( dCompleteness );
|
||
if( pAction->Pen.IsUseMetric() )
|
||
oPen.Size *= dMetricX;
|
||
|
||
Painter::CBrush& oBrush = m_oPaintSettings.GetBrush();
|
||
oBrush.ScaleAlpha1( dCompleteness );
|
||
oBrush.ScaleAlpha2( dCompleteness );
|
||
oBrush.ScaleTextureAlpha( dCompleteness );
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
double dLeft = pAction->Left * dMetricX;
|
||
double dTop = pAction->Top * dMetricY;
|
||
double dRight = pAction->Right * dMetricX;
|
||
double dBottom = pAction->Bottom * dMetricY;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
int nResult = Core::c_nErrorNone;
|
||
|
||
Gdiplus::Graphics oRender( pBitmap );
|
||
if( Gdiplus::Ok != oRender.GetLastStatus() )
|
||
return FALSE;
|
||
|
||
if (pAction->Solid)
|
||
nResult = Core::GDIPLUS::GDIPLUS_FillSector( &oRender, m_oPaintSettings, dLeft, dTop, dRight, dBottom, pAction->StartAngle, pAction->SweepAngle, pAction->RadiusRatio);
|
||
else
|
||
nResult = Core::GDIPLUS::GDIPLUS_DrawSector( &oRender, m_oPaintSettings, dLeft, dTop, dRight, dBottom, pAction->StartAngle, pAction->SweepAngle, pAction->RadiusRatio);
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
m_oPaintSettings.RestoreState();
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Paint_DrawSimplePie(ImageStudio::Serialize::Paint::Common::DrawSimplePie* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
Gdiplus::Bitmap* pBitmap = m_oSources.GetBitmap( pAction->SourceId );
|
||
if( !pBitmap )
|
||
return FALSE;
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !GetMetricMultiplier( pBitmap, pAction->Metric, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
m_oPaintSettings.SaveState();
|
||
m_oPaintSettings.SetPen(pAction->Pen);
|
||
m_oPaintSettings.SetBrush(pAction->Brush, FALSE);
|
||
|
||
Painter::CPen& oPen = m_oPaintSettings.GetPen();
|
||
oPen.ScaleAlpha( dCompleteness );
|
||
if( pAction->Pen.IsUseMetric() )
|
||
oPen.Size *= dMetricX;
|
||
|
||
Painter::CBrush& oBrush = m_oPaintSettings.GetBrush();
|
||
oBrush.ScaleAlpha1( dCompleteness );
|
||
oBrush.ScaleAlpha2( dCompleteness );
|
||
oBrush.ScaleTextureAlpha( dCompleteness );
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
double dMetricDiagonal = 1.0;
|
||
|
||
if (fabs(dMetricX - 1.0) > 0.001 || fabs(dMetricY - 1.0) > 0.001)
|
||
dMetricDiagonal = sqrt(dMetricX * dMetricX + dMetricY * dMetricY);
|
||
|
||
double dLeft = dMetricX*pAction->CenterX - dMetricDiagonal*pAction->Radius;
|
||
double dTop = dMetricY*pAction->CenterY - dMetricDiagonal*pAction->Radius;
|
||
double dRight = dMetricX*pAction->CenterX + dMetricDiagonal*pAction->Radius;
|
||
double dBottom = dMetricY*pAction->CenterY + dMetricDiagonal*pAction->Radius;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
int nResult = Core::c_nErrorNone;
|
||
|
||
Gdiplus::Graphics oRender( pBitmap );
|
||
if( Gdiplus::Ok != oRender.GetLastStatus() )
|
||
return FALSE;
|
||
|
||
if (pAction->Solid)
|
||
nResult = Core::GDIPLUS::GDIPLUS_FillPie( &oRender, m_oPaintSettings, dLeft, dTop, dRight, dBottom, pAction->StartAngle, pAction->SweepAngle);
|
||
else
|
||
nResult = Core::GDIPLUS::GDIPLUS_DrawPie( &oRender, m_oPaintSettings, dLeft, dTop, dRight, dBottom, pAction->StartAngle, pAction->SweepAngle);
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
m_oPaintSettings.RestoreState();
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Paint_DrawSimpleSector(ImageStudio::Serialize::Paint::Common::DrawSimpleSector* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
Gdiplus::Bitmap* pBitmap = m_oSources.GetBitmap( pAction->SourceId );
|
||
if( !pBitmap )
|
||
return FALSE;
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !GetMetricMultiplier( pBitmap, pAction->Metric, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
m_oPaintSettings.SaveState();
|
||
m_oPaintSettings.SetPen(pAction->Pen);
|
||
m_oPaintSettings.SetBrush(pAction->Brush, FALSE);
|
||
|
||
Painter::CPen& oPen = m_oPaintSettings.GetPen();
|
||
oPen.ScaleAlpha( dCompleteness );
|
||
if( pAction->Pen.IsUseMetric() )
|
||
oPen.Size *= dMetricX;
|
||
|
||
Painter::CBrush& oBrush = m_oPaintSettings.GetBrush();
|
||
oBrush.ScaleAlpha1( dCompleteness );
|
||
oBrush.ScaleAlpha2( dCompleteness );
|
||
oBrush.ScaleTextureAlpha( dCompleteness );
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
double dMetricDiagonal = 1.0;
|
||
|
||
if (fabs(dMetricX - 1.0) > 0.001 || fabs(dMetricY - 1.0) > 0.001)
|
||
dMetricDiagonal = sqrt(dMetricX * dMetricX + dMetricY * dMetricY);
|
||
|
||
double dLeft = dMetricX*pAction->CenterX - dMetricDiagonal*pAction->Radius1;
|
||
double dTop = dMetricY*pAction->CenterY - dMetricDiagonal*pAction->Radius1;
|
||
double dRight = dMetricX*pAction->CenterX + dMetricDiagonal*pAction->Radius1;
|
||
double dBottom = dMetricY*pAction->CenterY + dMetricDiagonal*pAction->Radius1;
|
||
double dRadius = pAction->Radius2 / max(0.0001, pAction->Radius1);
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
int nResult = Core::c_nErrorNone;
|
||
|
||
Gdiplus::Graphics oRender( pBitmap );
|
||
if( Gdiplus::Ok != oRender.GetLastStatus() )
|
||
return FALSE;
|
||
|
||
if (pAction->Solid)
|
||
nResult = Core::GDIPLUS::GDIPLUS_FillSector( &oRender, m_oPaintSettings, dLeft, dTop, dRight, dBottom, pAction->StartAngle, pAction->SweepAngle, dRadius);
|
||
else
|
||
nResult = Core::GDIPLUS::GDIPLUS_DrawSector( &oRender, m_oPaintSettings, dLeft, dTop, dRight, dBottom, pAction->StartAngle, pAction->SweepAngle, dRadius);
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
m_oPaintSettings.RestoreState();
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Paint_DrawPolyline(ImageStudio::Serialize::Paint::Common::DrawPolyline* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
int nPointsCount = pAction->Points.GetSize() / 2;
|
||
if (nPointsCount <= 0)
|
||
return TRUE;
|
||
|
||
Gdiplus::Bitmap* pBitmap = m_oSources.GetBitmap( pAction->SourceId );
|
||
if( !pBitmap )
|
||
return FALSE;
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !GetMetricMultiplier( pBitmap, pAction->Metric, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
m_oPaintSettings.SaveState();
|
||
m_oPaintSettings.SetPen(pAction->Pen);
|
||
|
||
Painter::CPen& oPen = m_oPaintSettings.GetPen();
|
||
oPen.ScaleAlpha( dCompleteness );
|
||
if( pAction->Pen.IsUseMetric() )
|
||
oPen.Size *= dMetricX;
|
||
|
||
CBuffer<Gdiplus::PointF> pPoints(nPointsCount);
|
||
if( pPoints.IsEmpty() )
|
||
return FALSE;
|
||
|
||
if( Core::c_nErrorNone != Core::COM::COM_ComputePolyline( pAction->Points.GetData(), pPoints, nPointsCount, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
Gdiplus::Graphics oRender( pBitmap );
|
||
if( Gdiplus::Ok != oRender.GetLastStatus() )
|
||
return FALSE;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
int nResult = Core::GDIPLUS::GDIPLUS_DrawPolyline( &oRender, m_oPaintSettings, pPoints, nPointsCount );
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
m_oPaintSettings.RestoreState();
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Paint_DrawPolygon(ImageStudio::Serialize::Paint::Common::DrawPolygon* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
int nPointsCount = pAction->Points.GetSize()/2;
|
||
if (nPointsCount < 1)
|
||
return TRUE;
|
||
|
||
Gdiplus::Bitmap* pBitmap = m_oSources.GetBitmap( pAction->SourceId );
|
||
if( !pBitmap )
|
||
return FALSE;
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !GetMetricMultiplier( pBitmap, pAction->Metric, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
m_oPaintSettings.SaveState();
|
||
m_oPaintSettings.SetPen(pAction->Pen);
|
||
m_oPaintSettings.SetBrush(pAction->Brush, FALSE);
|
||
|
||
Painter::CPen& oPen = m_oPaintSettings.GetPen();
|
||
oPen.ScaleAlpha( dCompleteness );
|
||
if( pAction->Pen.IsUseMetric() )
|
||
oPen.Size *= dMetricX;
|
||
|
||
Painter::CBrush& oBrush = m_oPaintSettings.GetBrush();
|
||
oBrush.ScaleAlpha1( dCompleteness );
|
||
oBrush.ScaleAlpha2( dCompleteness );
|
||
oBrush.ScaleTextureAlpha( dCompleteness );
|
||
|
||
int nResult = Core::c_nErrorNone;
|
||
|
||
CBuffer<Gdiplus::PointF> pPoints(nPointsCount);
|
||
if( pPoints.IsEmpty() )
|
||
return FALSE;
|
||
|
||
if( Core::c_nErrorNone != Core::COM::COM_ComputePolyline( pAction->Points.GetData(), pPoints, nPointsCount, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
Gdiplus::Graphics oRender( pBitmap );
|
||
if( Gdiplus::Ok != oRender.GetLastStatus() )
|
||
return FALSE;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
if (pAction->Solid)
|
||
nResult = Core::GDIPLUS::GDIPLUS_FillPolygon( &oRender, m_oPaintSettings, pPoints, nPointsCount );
|
||
else
|
||
nResult = Core::GDIPLUS::GDIPLUS_DrawPolygon( &oRender, m_oPaintSettings, pPoints, nPointsCount );
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
m_oPaintSettings.RestoreState();
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Paint_DrawBorder(ImageStudio::Serialize::Paint::Common::DrawBorder* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !GetMetricMultiplier( m_oSources.Get( pAction->SourceId ), pAction->Metric, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
m_oPaintSettings.SaveState();
|
||
m_oPaintSettings.SetBrush(pAction->Brush, FALSE);
|
||
|
||
Painter::CBrush& oBrush = m_oPaintSettings.GetBrush();
|
||
oBrush.ScaleAlpha1( dCompleteness );
|
||
oBrush.ScaleAlpha2( dCompleteness );
|
||
oBrush.ScaleTextureAlpha( dCompleteness );
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
double dSize = pAction->Size * dCompleteness;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
int nResult = Core::COM::COM_DrawBorder( m_oSources.Get( pAction->SourceId ), m_oPaintSettings, pAction->Type, dSize, dMetricX, dMetricY);
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
m_oPaintSettings.RestoreState();
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Paint_DrawMovObject(ImageStudio::Serialize::Paint::Common::DrawMovObject* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
double dImageWidth = 0;
|
||
double dImageHeight = 0;
|
||
GetMetricMultiplier( m_oSources.Get( pAction->SourceId ), 2, dImageWidth, dImageHeight );
|
||
|
||
int nDivisions = max(1, pAction->Divisions);
|
||
int nTileSizeX = int(dImageWidth ) / nDivisions;
|
||
int nTileSizeY = int(dImageHeight) / nDivisions;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
return (Core::c_nErrorNone == Core::COM::COM_DrawMovObject( m_oSources.Get( pAction->SourceId ), pAction->Color, pAction->Alpha, nTileSizeX, nTileSizeY, pAction->Type, dCompleteness, NULL));
|
||
}
|
||
BOOL Process_Paint_DrawCredits(ImageStudio::Serialize::Paint::Common::DrawCredits* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
Gdiplus::Bitmap* pBitmap = m_oSources.GetBitmap( pAction->SourceId );
|
||
if( !pBitmap )
|
||
return FALSE;
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !GetMetricMultiplier( pBitmap, pAction->Metric, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
m_oPaintSettings.SaveState();
|
||
m_oPaintSettings.SetFont(pAction->Font);
|
||
m_oPaintSettings.SetBrush(pAction->Brush, FALSE);
|
||
|
||
Painter::CBrush& oBrush = m_oPaintSettings.GetBrush();
|
||
//oBrush.ScaleAlpha1( dCompleteness );
|
||
//oBrush.ScaleAlpha2( dCompleteness );
|
||
//oBrush.ScaleTextureAlpha( dCompleteness );
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
Painter::CFont& oFont = m_oPaintSettings.GetFont();
|
||
double dFontSize = oFont.GetFontSize() * dMetricX;
|
||
oFont.SetFontSize( dFontSize );
|
||
|
||
double dImageWidth = 0;
|
||
double dImageHeight = 0;
|
||
GetMetricMultiplier( pBitmap, 2, dImageWidth, dImageHeight );
|
||
|
||
Gdiplus::Graphics oRender( pBitmap );
|
||
if( Gdiplus::Ok != oRender.GetLastStatus() )
|
||
return FALSE;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||
int nResult = Core::GDIPLUS::GDIPLUS_DrawCredits( &oRender, m_oPaintSettings, pAction->Text, 0, 0, float(dImageWidth), float(dImageHeight), dCompleteness, pAction->Type);
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
m_oPaintSettings.RestoreState();
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Paint_DrawTextSimple(ImageStudio::Serialize::Paint::Common::DrawTextSimple* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
Gdiplus::Bitmap* pBitmap = m_oSources.GetBitmap( pAction->SourceId );
|
||
if( !pBitmap )
|
||
return FALSE;
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !GetMetricMultiplier( pBitmap, pAction->Metric, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
m_oPaintSettings.SaveState();
|
||
m_oPaintSettings.SetFont(pAction->Font);
|
||
m_oPaintSettings.SetBrush(pAction->Brush, FALSE);
|
||
|
||
Painter::CBrush& oBrush = m_oPaintSettings.GetBrush();
|
||
oBrush.ScaleAlpha1( dCompleteness );
|
||
oBrush.ScaleAlpha2( dCompleteness );
|
||
oBrush.ScaleTextureAlpha( dCompleteness );
|
||
|
||
// <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
Painter::CFont& oFont = m_oPaintSettings.GetFont();
|
||
double dFontSize = oFont.GetFontSize() * dMetricX;
|
||
oFont.SetFontSize( dFontSize );
|
||
|
||
double dLeft = dMetricX * pAction->Left;
|
||
double dTop = dMetricY * pAction->Top;
|
||
double dMargin = dMetricX * pAction->nMargin;
|
||
|
||
Gdiplus::Graphics oRender( pBitmap );
|
||
if( Gdiplus::Ok != oRender.GetLastStatus() )
|
||
return FALSE;
|
||
|
||
int nResult = Core::c_nErrorNone;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
if ( !pAction->bAlign )
|
||
nResult = Core::GDIPLUS::GDIPLUS_DrawText( &oRender, m_oPaintSettings, pAction->Text, dLeft, dTop);
|
||
else
|
||
{
|
||
int nWidth = pBitmap->GetWidth();
|
||
int nHeight = pBitmap->GetHeight();
|
||
|
||
float fLeft = 0.0;
|
||
float fTop = 0.0;
|
||
float fTextWidth = 0.0;
|
||
float fTextHeight = 0.0;
|
||
|
||
Gdiplus::RectF oRect;
|
||
BSTR bsText = pAction->Text.AllocSysString();
|
||
|
||
m_oPaintSettings.GetBrush().GetTextRect(bsText, &oRender, m_oPaintSettings.GetFont().GetFont(), 0, 0, &oRect);
|
||
|
||
::SysFreeString(bsText);
|
||
|
||
fTextWidth = oRect.GetRight();
|
||
fTextHeight = oRect.GetBottom();
|
||
|
||
switch (pAction->nAlignType)
|
||
{
|
||
case 0: fLeft = float(dMargin); fTop = float(dMargin); break;
|
||
case 1: fLeft = float(nWidth) / 2 - fTextWidth / 2; fTop = float(dMargin); break;
|
||
case 2: fLeft = float(nWidth) - fTextWidth - float(dMargin); fTop = float(dMargin); break;
|
||
case 3: fLeft = float(dMargin); fTop = float(nHeight) / 2 - fTextHeight / 2; break;
|
||
case 4: fLeft = float(nWidth) / 2 - fTextWidth / 2; fTop = float(nHeight) / 2 - fTextHeight / 2; break;
|
||
case 5: fLeft = float(nWidth) - fTextWidth - float(dMargin); fTop = float(nHeight) / 2 - fTextHeight / 2; break;
|
||
case 6: fLeft = float(dMargin); fTop = float(nHeight) - fTextHeight - float(dMargin); break;
|
||
case 7: fLeft = float(nWidth) / 2 - fTextWidth / 2; fTop = float(nHeight) - fTextHeight - float(dMargin); break;
|
||
case 8: fLeft = float(nWidth) - fTextWidth - float(dMargin); fTop = float(nHeight) - fTextHeight - float(dMargin); break;
|
||
}
|
||
|
||
nResult = Core::GDIPLUS::GDIPLUS_DrawText( &oRender, m_oPaintSettings, pAction->Text, fLeft, fTop);
|
||
}
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
m_oPaintSettings.RestoreState();
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Paint_DrawTextInRect(ImageStudio::Serialize::Paint::Common::DrawTextInRect* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
Gdiplus::Bitmap* pBitmap = m_oSources.GetBitmap( pAction->SourceId );
|
||
if( !pBitmap )
|
||
return FALSE;
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !GetMetricMultiplier( pBitmap, pAction->Metric, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
m_oPaintSettings.SaveState();
|
||
m_oPaintSettings.SetFont(pAction->Font);
|
||
m_oPaintSettings.SetBrush(pAction->Brush, FALSE);
|
||
|
||
Painter::CBrush& oBrush = m_oPaintSettings.GetBrush();
|
||
oBrush.ScaleAlpha1( dCompleteness );
|
||
oBrush.ScaleAlpha2( dCompleteness );
|
||
oBrush.ScaleTextureAlpha( dCompleteness );
|
||
|
||
// <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
Painter::CFont& oFont = m_oPaintSettings.GetFont();
|
||
double dFontSize = oFont.GetFontSize() * dMetricX;
|
||
oFont.SetFontSize( dFontSize );
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||
int nResult = Core::c_nErrorNone;
|
||
|
||
double dLeft = pAction->Left * dMetricX;
|
||
double dTop = pAction->Top * dMetricY;
|
||
double dRight = pAction->Right * dMetricX;
|
||
double dBottom = pAction->Bottom * dMetricY;
|
||
|
||
Gdiplus::Graphics oRender( pBitmap );
|
||
if( Gdiplus::Ok != oRender.GetLastStatus() )
|
||
return FALSE;
|
||
|
||
if (pAction->Scale)
|
||
nResult = Core::GDIPLUS::GDIPLUS_DrawTextScale( &oRender, m_oPaintSettings, pAction->Text, dLeft, dTop, dRight, dBottom);
|
||
else
|
||
nResult = Core::GDIPLUS::GDIPLUS_DrawText( &oRender, m_oPaintSettings, pAction->Text, dLeft, dTop, dRight, dBottom);
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
m_oPaintSettings.RestoreState();
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Paint_DrawImageFromFile(ImageStudio::Serialize::Paint::Common::DrawImageFromFile* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
IUnknown* pInterfaceImage = NULL;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> m_oCache - <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
int nSessionID = pAction->GetSessionID();
|
||
ImageStudio::Caching::CCacheItem* pCacheItem = m_oCache.GetAt(nSessionID);
|
||
if (NULL != pCacheItem && ImageStudio::Caching::c_nTypeInterface == pCacheItem->GetType())
|
||
{
|
||
pInterfaceImage = ((ImageStudio::Caching::CCacheItemInterface*)pCacheItem)->GetInterface();
|
||
|
||
//if (NULL != pInterfaceImage)
|
||
//{
|
||
// ULONG nRef = pInterfaceImage->AddRef();
|
||
// if( nRef > 10 )
|
||
// {
|
||
// int a = 0;
|
||
// }
|
||
//}
|
||
}
|
||
else
|
||
{
|
||
if( m_pFileCache )
|
||
{
|
||
//m_pFileCache->raw_LoadImageW( _bstr_t( pAction->FilePath ), -1, -1, &pInterfaceImage );
|
||
|
||
if( pInterfaceImage )
|
||
//if( Core::c_nErrorNone == Core::COM::COM_LoadImage( &pInterfaceImage, pAction->FilePath ) )
|
||
{
|
||
ImageStudio::Caching::CCacheItemInterface* pCacheInterface = new ImageStudio::Caching::CCacheItemInterface(pInterfaceImage);
|
||
m_oCache.Add(nSessionID, pCacheInterface);
|
||
pInterfaceImage->Release();
|
||
}
|
||
|
||
}
|
||
else
|
||
{
|
||
pInterfaceImage = m_oImageCache.GetImage( pAction->FilePath );
|
||
if( pInterfaceImage )
|
||
//if( Core::c_nErrorNone == Core::COM::COM_LoadImage( &pInterfaceImage, pAction->FilePath ) )
|
||
{
|
||
ImageStudio::Caching::CCacheItemInterface* pCacheInterface = new ImageStudio::Caching::CCacheItemInterface(pInterfaceImage);
|
||
m_oCache.Add(nSessionID, pCacheInterface);
|
||
}
|
||
}
|
||
}
|
||
|
||
if( !pInterfaceImage )
|
||
return FALSE;
|
||
|
||
double dMetricX = 1, dMetricY = 1;
|
||
GetMetricMultiplier( m_oSources.Get( pAction->SourceId ), pAction->Metric, dMetricX, dMetricY );
|
||
|
||
double dLeft = pAction->Left * dMetricX;
|
||
double dRight = pAction->Right * dMetricX;
|
||
double dTop = pAction->Top * dMetricY;
|
||
double dBottom = pAction->Bottom * dMetricY;
|
||
|
||
if ((0 != pAction->dWidthMetric) && (0 != pAction->dHeightMetric) && (NULL != m_oSources.Get(0)))
|
||
{
|
||
long lSrcWidth = 0;m_oSources.Get(0)->get_Width(&lSrcWidth);
|
||
long lSrcHeight = 0;m_oSources.Get(0)->get_Height(&lSrcHeight);
|
||
|
||
dLeft = (dLeft / pAction->dWidthMetric) * lSrcWidth;
|
||
dRight = (dRight / pAction->dWidthMetric) * lSrcWidth;
|
||
dTop = (dTop / pAction->dHeightMetric) * lSrcHeight;
|
||
dBottom = (dBottom / pAction->dHeightMetric) * lSrcHeight;
|
||
}
|
||
|
||
int nResult = Core::COM::COM_DrawImageFromFile( m_oSources.Get( pAction->SourceId ), pInterfaceImage, pAction->BackColor, pAction->nDrawImageScaleType, pAction->nDrawImageScaleBackColor, pAction->Alpha, dCompleteness, dLeft, dTop, dRight, dBottom, pAction->Angle, pAction->bAlign, pAction->nAlignType, pAction->nMarginX, pAction->nMarginY, pAction->nSizeType, pAction->nWidth, pAction->nHeight );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Paint_DrawImageFromFileEx(ImageStudio::Serialize::Paint::Common::DrawImageFromFileEx* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
IUnknown* pSrcInterface = NULL;
|
||
IUnknown* pDstInterface = NULL;
|
||
|
||
if( m_oSources.IsValidSource( pAction->nSrcBuffer ) )
|
||
{
|
||
pSrcInterface = m_oSources.Get( pAction->nSrcBuffer );
|
||
}
|
||
else
|
||
{
|
||
if( m_pMemoryStorage && pAction->sObjectId.GetLength() )
|
||
{
|
||
m_pMemoryStorage->Get( _bstr_t( pAction->sObjectId ), &pSrcInterface );
|
||
}
|
||
else
|
||
{
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> m_oCache - <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
int nSessionID = pAction->GetSessionID();
|
||
ImageStudio::Caching::CCacheItem* pCacheItem = m_oCache.GetAt(nSessionID);
|
||
if (NULL != pCacheItem && ImageStudio::Caching::c_nTypeInterface == pCacheItem->GetType())
|
||
{
|
||
pSrcInterface = ((ImageStudio::Caching::CCacheItemInterface*)pCacheItem)->GetInterface();
|
||
}
|
||
else
|
||
{
|
||
if( m_pFileCache )
|
||
{
|
||
//m_pFileCache->raw_LoadImageW( _bstr_t( pAction->sFilePath ), -1, -1, &pSrcInterface );
|
||
|
||
if( pSrcInterface )
|
||
{
|
||
ImageStudio::Caching::CCacheItemInterface* pCacheInterface = new ImageStudio::Caching::CCacheItemInterface(pSrcInterface);
|
||
m_oCache.Add(nSessionID, pCacheInterface);
|
||
pSrcInterface->Release();
|
||
}
|
||
|
||
}
|
||
else
|
||
{
|
||
pSrcInterface = m_oImageCache.GetImage( pAction->sFilePath );
|
||
if( pSrcInterface )
|
||
{
|
||
ImageStudio::Caching::CCacheItemInterface* pCacheInterface = new ImageStudio::Caching::CCacheItemInterface(pSrcInterface);
|
||
m_oCache.Add(nSessionID, pCacheInterface);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
if( !pSrcInterface )
|
||
return FALSE;
|
||
|
||
pDstInterface = m_oSources.Get( pAction->SourceId );
|
||
if( !pDstInterface )
|
||
return FALSE;
|
||
|
||
double dSrcMetricX, dSrcMetricY;
|
||
double dDstMetricX, dDstMetricY;
|
||
|
||
GetMetricMultiplier( pSrcInterface, pAction->nSrcMetric, dSrcMetricX, dSrcMetricY );
|
||
GetMetricMultiplier( pDstInterface, pAction->nDstMetric, dDstMetricX, dDstMetricY );
|
||
|
||
double dSrcX = dSrcMetricX * pAction->dSrcX;
|
||
double dSrcY = dSrcMetricY * pAction->dSrcY;
|
||
double dSrcWidth = dSrcMetricX * pAction->dSrcWidth;
|
||
double dSrcHeight = dSrcMetricY * pAction->dSrcHeight;
|
||
|
||
double dDstX = dDstMetricX * pAction->dDstX;
|
||
double dDstY = dDstMetricY * pAction->dDstY;
|
||
double dDstWidth = dDstMetricX * pAction->dDstWidth;
|
||
double dDstHeight = dDstMetricY * pAction->dDstHeight;
|
||
|
||
int nResult = Core::COM::COM_DrawImageFromFileEx( pSrcInterface, pDstInterface, dSrcX, dSrcY, dSrcWidth, dSrcHeight, dDstX, dDstY, dDstWidth, dDstHeight, pAction->nSrcColorKey, pAction->nScaleType, pAction->dCropScale, pAction->dAngle, pAction->dAlpha );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Paint_DrawImageFromBuffer(ImageStudio::Serialize::Paint::Common::DrawImageFromBuffer* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
int nResult = Core::c_nErrorNone;
|
||
|
||
if ( m_oSources.IsValidSource( pAction->Buffer ) )
|
||
{
|
||
// <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
double dMetricX = 1, dMetricY = 1;
|
||
if( !GetMetricMultiplier( m_oSources.Get( pAction->SourceId ), pAction->Metric, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
double dLeft = pAction->Left * dMetricX;
|
||
double dRight = pAction->Right * dMetricX;
|
||
double dTop = pAction->Top * dMetricY;
|
||
double dBottom = pAction->Bottom * dMetricY;
|
||
|
||
nResult = Core::COM::COM_DrawImageFromFile( m_oSources.Get( pAction->SourceId ), m_oSources.Get( pAction->Buffer ), -1, pAction->nDrawImageScaleType, pAction->nDrawImageScaleBackColor, pAction->Alpha, dCompleteness, dLeft, dTop, dRight, dBottom, pAction->Angle, pAction->bAlign, pAction->nAlignType, pAction->nMarginX, pAction->nMarginY, pAction->nSizeType, pAction->nWidth, pAction->nHeight );
|
||
}
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Paint_DrawTimer(ImageStudio::Serialize::Paint::Common::DrawTimer* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
Gdiplus::Bitmap* pBitmap = m_oSources.GetBitmap( pAction->SourceId );
|
||
if( !pBitmap )
|
||
return FALSE;
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !GetMetricMultiplier( pBitmap, pAction->m_nMetric, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
double dAbsTime = pAction->GetRelativeTime( m_dTime );
|
||
double dTimeLength = pAction->GetTimeLength( m_dTime );
|
||
double dAbsCompleteness = dTimeLength > 0 ? dAbsTime / dTimeLength : 1;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
m_oPaintSettings.SaveState();
|
||
|
||
m_oPaintSettings.SetFont ( pAction->m_oFont );
|
||
m_oPaintSettings.SetBrush ( pAction->m_oBrush, FALSE );
|
||
m_oPaintSettings.SetShadow( pAction->m_oShadow );
|
||
m_oPaintSettings.SetEdge ( pAction->m_oEdge );
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||
__int64 nMS1 = pAction->m_oHours.m_nStart * 3600000 + pAction->m_oMinutes.m_nStart * 60000 + pAction->m_oSeconds.m_nStart * 1000 + pAction->m_oMilliseconds.m_nStart;
|
||
__int64 nMS2 = pAction->m_oHours.m_nEnd * 3600000 + pAction->m_oMinutes.m_nEnd * 60000 + pAction->m_oSeconds.m_nEnd * 1000 + pAction->m_oMilliseconds.m_nEnd;
|
||
|
||
if( pAction->m_bUnlimited )
|
||
{
|
||
nMS2 = nMS1 + __int64( dAbsTime );
|
||
}
|
||
|
||
__int64 nMSResult = nMS2 - nMS1;
|
||
|
||
nMSResult = __int64(nMSResult * (pAction->m_bUnlimited ? 1 : (pAction->m_nTimerType ? dAbsCompleteness : dCompleteness)) + nMS1 + 0.5);
|
||
|
||
int nHours = int(nMSResult / 3600000); nMSResult %= 3600000;
|
||
int nMinutes = int(nMSResult / 60000); nMSResult %= 60000;
|
||
int nSeconds = int(nMSResult / 1000); nMSResult %= 1000;
|
||
int nMillis = int(nMSResult);
|
||
|
||
CString sTime = _T("");
|
||
pAction->m_oHours .AddToString( sTime, nHours );
|
||
pAction->m_oMinutes .AddToString( sTime, nMinutes );
|
||
pAction->m_oSeconds .AddToString( sTime, nSeconds );
|
||
pAction->m_oMilliseconds.AddToString( sTime, nMillis );
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
BSTR text = sTime.AllocSysString();
|
||
|
||
ImageStudio::Paint::Text::CTextPainter2 oTextRender;
|
||
|
||
// <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
Painter::CFont& oFont = m_oPaintSettings.GetFont();
|
||
double dNewFontSize = oFont.Size * dMetricX;
|
||
oFont.SetFontSize(dNewFontSize);
|
||
|
||
Gdiplus::Font* pFont = m_oPaintSettings.GetFont().GetFont();
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||
double dLeft = dMetricX * pAction->m_dLeft;
|
||
double dTop = dMetricY * pAction->m_dTop;
|
||
double dRight = dMetricX * pAction->m_dRight;
|
||
double dBottom = dMetricY * pAction->m_dBottom;
|
||
|
||
double dImageWidth = 0;
|
||
double dImageHeight = 0;
|
||
GetMetricMultiplier( pBitmap, 2, dImageWidth, dImageHeight );
|
||
|
||
Gdiplus::RectF oLayoutRect( float(dLeft), float(dTop), float(dRight - dLeft), float(dBottom - dTop) );
|
||
oLayoutRect.Inflate( 20000, 20000 );
|
||
|
||
::srand( 1000 );
|
||
|
||
oTextRender.CreateText( text, *pFont, oLayoutRect, 1, 1 );
|
||
oTextRender.CreateEffects( pAction->m_nAnimationID[0], pAction->m_nAnimationID[2], pAction->m_nTypeEffects, FALSE );
|
||
|
||
oTextRender.m_fAngle = float(pAction->m_oFont.IsValidAngle() ? pAction->m_oFont.GetAngle() : 0);
|
||
|
||
Painter::CEdgeText& oEdge = m_oPaintSettings.GetEdge();
|
||
double dNewDistance = oEdge.Dist * dMetricX;
|
||
oEdge.SetDistance( dNewDistance );
|
||
|
||
Painter::CShadow& oShadow = m_oPaintSettings.GetShadow();
|
||
double dNewDistanceX = oShadow.DistanceX * dMetricX;
|
||
oShadow.SetDistanceX( dNewDistanceX );
|
||
|
||
double dNewDistanceY = oShadow.DistanceY * dMetricY;
|
||
oShadow.SetDistanceY( dNewDistanceY );
|
||
|
||
double dNewBlurSize = oShadow.BlurSize * dMetricX;
|
||
if( dNewBlurSize > 100 )
|
||
dNewBlurSize = 100;
|
||
oShadow.SetBlurSize( dNewBlurSize );
|
||
|
||
Painter::CBrush& oFillBrush = m_oPaintSettings.GetBrush();
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
IUnknown* pTextureInterface = m_oImageCache.GetImage( oFillBrush.TexturePath );
|
||
if( pTextureInterface )
|
||
{
|
||
BYTE* pBGRA = NULL;
|
||
int nWidth = 0;
|
||
int nHeight = 0;
|
||
|
||
if( Core::c_nErrorNone == Core::COM::COM_GetBGRAImageFromInterface( pTextureInterface, pBGRA, nWidth, nHeight ) )
|
||
{
|
||
Painter::CTexture* pTexture = new Painter::CTexture();
|
||
if( pTexture )
|
||
{
|
||
Gdiplus::Rect oImageRect( 0, 0, nWidth, nHeight );
|
||
|
||
ImageStudio::Serialize::Paint::Structures::Brush& brush = pAction->m_oBrush;
|
||
if( brush.GetRectable() )
|
||
{
|
||
Gdiplus::RectF oRect = brush.GetRect();
|
||
Gdiplus::Rect oBrushRect(
|
||
int(oRect.X * nWidth + 0.5),
|
||
int(oRect.Y * nHeight + 0.5),
|
||
int(oRect.Width * nWidth + 0.5),
|
||
int(oRect.Height * nHeight + 0.5) );
|
||
|
||
if( oBrushRect.Intersect( oImageRect ) )
|
||
{
|
||
pBGRA += (oBrushRect.Y * nWidth + oBrushRect.X) * 4;
|
||
oImageRect.Width = oBrushRect.Width;
|
||
oImageRect.Height = oBrushRect.Height;
|
||
}
|
||
}
|
||
|
||
pTexture->Path = oFillBrush.TexturePath.MakeLower();
|
||
pTexture->Bitmap = NULL;
|
||
pTexture->BitmapData = pBGRA;
|
||
pTexture->bFlipVertical = FALSE;
|
||
pTexture->bAttach = TRUE;
|
||
pTexture->nWidth = oImageRect.Width;
|
||
pTexture->nHeight = oImageRect.Height;
|
||
pTexture->nStride = nWidth*4;
|
||
|
||
oTextRender.m_oTextureManager.Add( pTexture );
|
||
oTextRender.pImage = pTextureInterface;
|
||
pTextureInterface->AddRef();
|
||
}
|
||
}
|
||
}
|
||
|
||
::SysFreeString( text );
|
||
|
||
oTextRender.SetFillBrush( oFillBrush );
|
||
oTextRender.SetEdge( oEdge );
|
||
oTextRender.SetShadow( oShadow );
|
||
|
||
oTextRender.m_nFillMode = pAction->m_nFillMode;
|
||
|
||
Gdiplus::Graphics oRender( pBitmap );
|
||
if( Gdiplus::Ok != oRender.GetLastStatus() )
|
||
return FALSE;
|
||
|
||
oTextRender.Draw( dCompleteness, oRender );
|
||
|
||
m_oPaintSettings.RestoreState();
|
||
|
||
return TRUE;
|
||
}
|
||
BOOL Process_Paint_DrawImageFromStorage(ImageStudio::Serialize::Paint::Common::DrawImageFromStorage* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
if( !m_pMemoryStorage )
|
||
return TRUE;
|
||
|
||
IUnknown* pInterfaceImage = NULL;
|
||
_bstr_t id( pAction->ObjectId );
|
||
|
||
m_pMemoryStorage->Get( id, &pInterfaceImage );
|
||
if( !pInterfaceImage )
|
||
return TRUE;
|
||
|
||
double dMetricX = 1, dMetricY = 1;
|
||
GetMetricMultiplier( m_oSources.Get( pAction->SourceId ), pAction->Metric, dMetricX, dMetricY );
|
||
|
||
double dLeft = pAction->Left * dMetricX;
|
||
double dRight = pAction->Right * dMetricX;
|
||
double dTop = pAction->Top * dMetricY;
|
||
double dBottom = pAction->Bottom * dMetricY;
|
||
|
||
int nResult = Core::COM::COM_DrawImageFromFile( m_oSources.Get( pAction->SourceId ), pInterfaceImage, pAction->BackColor, pAction->nDrawImageScaleType, pAction->nDrawImageScaleBackColor, pAction->Alpha, dCompleteness, dLeft, dTop, dRight, dBottom, pAction->Angle, pAction->bAlign, pAction->nAlignType, pAction->nMarginX, pAction->nMarginY, pAction->nSizeType, pAction->nWidth, pAction->nHeight );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Paint_DrawFilm(ImageStudio::Serialize::Paint::Common::DrawFilm* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
int nResult = Core::COM::COM_DrawFilm( m_oSources.Get( pAction->SourceId ), dCompleteness, pAction->GetRelativeTime(m_dTime), pAction->m_nSpeed, pAction->m_dWideFactor, pAction->m_bVertical, pAction->m_bDrawBorder, pAction->m_nBkColor, pAction->m_nFilmMidColor, pAction->m_nFilmBorderColor, pAction->m_nBlendcolor, pAction->m_bZoom, pAction->m_nAlpha, pAction->m_bMoveDivider, pAction->m_dSpeedFactor );
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
|
||
BOOL Process_Paint_DrawPuzzle(ImageStudio::Serialize::Paint::Common::DrawPuzzle* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if( dCompleteness < 0.000001 )
|
||
return TRUE;
|
||
|
||
|
||
int nSessionID = pAction->GetSessionID();
|
||
ImageStudio::Caching::CCacheItem* pCacheItem = m_oCache.GetAt(nSessionID);
|
||
if (NULL == pCacheItem || ImageStudio::Caching::c_nTypePointer != pCacheItem->GetType())
|
||
{
|
||
ImageStudio::Paint::Effects::Puzzle* pEffect = new ImageStudio::Paint::Effects::Puzzle( );
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !GetMetricMultiplier( m_oSources.Get( pAction->SourceId ), pAction->m_nMetric, dMetricX, dMetricY ) )
|
||
{
|
||
delete pEffect;
|
||
return FALSE;
|
||
}
|
||
|
||
double dSide = pAction->m_dSideFactor * dMetricX;
|
||
pEffect->Create( *pAction, dSide, GetBaseRandom( pAction->BaseRandom ) );
|
||
|
||
m_oCache.Add(nSessionID, pEffect);
|
||
|
||
pCacheItem = pEffect;
|
||
}
|
||
|
||
ImageStudio::Paint::Effects::Puzzle* pPainter = (ImageStudio::Paint::Effects::Puzzle*)pCacheItem;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||
int nResult = Core::COM::COM_DrawPuzzle( m_oSources.Get( pAction->SourceId ), pPainter, dCompleteness, pAction->m_nRow, pAction->m_nCol, pAction->m_dSideFactor, pAction->m_nType);
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
BOOL Process_Paint_DrawFog(ImageStudio::Serialize::Paint::Common::DrawFog* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if( dCompleteness < 0.000001 )
|
||
return TRUE;
|
||
|
||
double dAlpha = pAction->Alpha / 255.0 * dCompleteness;
|
||
|
||
int nResult = Core::COM::COM_DrawFog( m_oSources.Get( pAction->SourceId ), pAction->Color, dAlpha );
|
||
|
||
return Core::c_nErrorNone == nResult;
|
||
}
|
||
BOOL Process_Paint_DrawPath(ImageStudio::Serialize::Paint::Common::DrawGraphicPath* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.000001)
|
||
return TRUE;
|
||
|
||
BYTE* pBGRA = NULL;
|
||
int nWidth = 0;
|
||
int nHeight = 0;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> BGRA
|
||
int nStatus = ImageStudio::Transforms::Core::COM::COM_GetBGRAImageFromInterface( m_oSources.Get( pAction->SourceId ), pBGRA, nWidth, nHeight);
|
||
if (nStatus != Core::c_nErrorNone)
|
||
return FALSE;
|
||
|
||
return pAction->Draw(m_oSources.Get( pAction->SourceId ));
|
||
}
|
||
BOOL Process_Paint_AutoShape(ImageStudio::Serialize::Paint::Common::DrawAutoShape* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.000001)
|
||
return TRUE;
|
||
|
||
BYTE* pBGRA = NULL;
|
||
int nWidth = 0;
|
||
int nHeight = 0;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> BGRA
|
||
int nStatus = ImageStudio::Transforms::Core::COM::COM_GetBGRAImageFromInterface( m_oSources.Get( pAction->SourceId ), pBGRA, nWidth, nHeight);
|
||
if (nStatus != Core::c_nErrorNone)
|
||
return FALSE;
|
||
|
||
return pAction->Draw(m_oSources.Get( pAction->SourceId ), dCompleteness);
|
||
}
|
||
BOOL Process_Paint_DrawTextEx(ImageStudio::Serialize::Paint::Common::DrawTextEx* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.000001)
|
||
return TRUE;
|
||
|
||
BYTE* pBGRA = NULL;
|
||
int nWidth = 0;
|
||
int nHeight = 0;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> BGRA
|
||
int nStatus = ImageStudio::Transforms::Core::COM::COM_GetBGRAImageFromInterface( m_oSources.Get( pAction->SourceId ), pBGRA, nWidth, nHeight);
|
||
if (nStatus != Core::c_nErrorNone)
|
||
return FALSE;
|
||
|
||
return pAction->Draw(m_oSources.Get( pAction->SourceId ), 1.0);
|
||
}
|
||
|
||
BOOL Process_Paint_DrawCountdown(ImageStudio::Serialize::Paint::Common::DrawCountdown* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
Gdiplus::Bitmap* pBitmap = m_oSources.GetBitmap( pAction->SourceId );
|
||
if( !pBitmap )
|
||
return FALSE;
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !GetMetricMultiplier( pBitmap, pAction->m_nMetric, dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
m_oPaintSettings.SaveState();
|
||
|
||
m_oPaintSettings.SetFont ( pAction->m_oFont );
|
||
m_oPaintSettings.SetBrush ( pAction->m_oBrush, FALSE );
|
||
m_oPaintSettings.SetShadow( pAction->m_oShadow );
|
||
m_oPaintSettings.SetEdge ( pAction->m_oEdge );
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
double dAbsTime = pAction->GetRelativeTime( m_dTime );
|
||
double dTimeLength = pAction->GetTimeLength( m_dTime );
|
||
double dAbsCompleteness = dTimeLength > 0 ? dAbsTime / dTimeLength : 1;
|
||
|
||
int nCurNumber = Round(pAction->m_nStartNumber + dAbsCompleteness * (pAction->m_nFinishNumber - pAction->m_nStartNumber));
|
||
|
||
CString sNumber = _T("");
|
||
sNumber.Format( _T("%d"), nCurNumber );
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
BSTR text = sNumber.AllocSysString();
|
||
|
||
ImageStudio::Paint::Text::CTextPainter2 oTextRender;
|
||
|
||
// <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
Painter::CFont& oFont = m_oPaintSettings.GetFont();
|
||
double dNewFontSize = oFont.Size * dMetricX;
|
||
oFont.SetFontSize(dNewFontSize);
|
||
|
||
Gdiplus::Font* pFont = m_oPaintSettings.GetFont().GetFont();
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||
double dLeft = dMetricX * pAction->m_dLeft;
|
||
double dTop = dMetricY * pAction->m_dTop;
|
||
double dRight = dMetricX * pAction->m_dRight;
|
||
double dBottom = dMetricY * pAction->m_dBottom;
|
||
|
||
double dImageWidth = 0;
|
||
double dImageHeight = 0;
|
||
GetMetricMultiplier( pBitmap, 2, dImageWidth, dImageHeight );
|
||
|
||
Gdiplus::RectF oLayoutRect( float(dLeft), float(dTop), float(dRight - dLeft), float(dBottom - dTop) );
|
||
oLayoutRect.Inflate( 20000, 20000 );
|
||
|
||
::srand( 1000 );
|
||
|
||
oTextRender.CreateText( text, *pFont, oLayoutRect, 1, 1 );
|
||
oTextRender.CreateEffects( pAction->m_nAnimationID[0], pAction->m_nAnimationID[2], pAction->m_nTypeEffects, FALSE );
|
||
|
||
oTextRender.m_fAngle = float(pAction->m_oFont.IsValidAngle() ? pAction->m_oFont.GetAngle() : 0);
|
||
|
||
Painter::CEdgeText& oEdge = m_oPaintSettings.GetEdge();
|
||
double dNewDistance = oEdge.Dist * dMetricX;
|
||
oEdge.SetDistance( dNewDistance );
|
||
|
||
Painter::CShadow& oShadow = m_oPaintSettings.GetShadow();
|
||
double dNewDistanceX = oShadow.DistanceX * dMetricX;
|
||
oShadow.SetDistanceX( dNewDistanceX );
|
||
|
||
double dNewDistanceY = oShadow.DistanceY * dMetricY;
|
||
oShadow.SetDistanceY( dNewDistanceY );
|
||
|
||
double dNewBlurSize = oShadow.BlurSize * dMetricX;
|
||
if( dNewBlurSize > 100 )
|
||
dNewBlurSize = 100;
|
||
oShadow.SetBlurSize( dNewBlurSize );
|
||
|
||
Painter::CBrush& oFillBrush = m_oPaintSettings.GetBrush();
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
IUnknown* pTextureInterface = m_oImageCache.GetImage( oFillBrush.TexturePath );
|
||
if( pTextureInterface )
|
||
{
|
||
BYTE* pBGRA = NULL;
|
||
int nWidth = 0;
|
||
int nHeight = 0;
|
||
|
||
if( Core::c_nErrorNone == Core::COM::COM_GetBGRAImageFromInterface( pTextureInterface, pBGRA, nWidth, nHeight ) )
|
||
{
|
||
Painter::CTexture* pTexture = new Painter::CTexture();
|
||
if( pTexture )
|
||
{
|
||
Gdiplus::Rect oImageRect( 0, 0, nWidth, nHeight );
|
||
|
||
ImageStudio::Serialize::Paint::Structures::Brush& brush = pAction->m_oBrush;
|
||
if( brush.GetRectable() )
|
||
{
|
||
Gdiplus::RectF oRect = brush.GetRect();
|
||
Gdiplus::Rect oBrushRect(
|
||
int(oRect.X * nWidth + 0.5),
|
||
int(oRect.Y * nHeight + 0.5),
|
||
int(oRect.Width * nWidth + 0.5),
|
||
int(oRect.Height * nHeight + 0.5) );
|
||
|
||
if( oBrushRect.Intersect( oImageRect ) )
|
||
{
|
||
pBGRA += (oBrushRect.Y * nWidth + oBrushRect.X) * 4;
|
||
oImageRect.Width = oBrushRect.Width;
|
||
oImageRect.Height = oBrushRect.Height;
|
||
}
|
||
}
|
||
|
||
pTexture->Path = oFillBrush.TexturePath.MakeLower();
|
||
pTexture->Bitmap = NULL;
|
||
pTexture->BitmapData = pBGRA;
|
||
pTexture->bFlipVertical = FALSE;
|
||
pTexture->bAttach = TRUE;
|
||
pTexture->nWidth = oImageRect.Width;
|
||
pTexture->nHeight = oImageRect.Height;
|
||
pTexture->nStride = nWidth*4;
|
||
|
||
oTextRender.m_oTextureManager.Add( pTexture );
|
||
oTextRender.pImage = pTextureInterface;
|
||
pTextureInterface->AddRef();
|
||
}
|
||
}
|
||
}
|
||
|
||
::SysFreeString( text );
|
||
|
||
oTextRender.SetFillBrush( oFillBrush );
|
||
oTextRender.SetEdge( oEdge );
|
||
oTextRender.SetShadow( oShadow );
|
||
|
||
oTextRender.m_nFillMode = pAction->m_nFillMode;
|
||
|
||
Gdiplus::Graphics oRender( pBitmap );
|
||
if( Gdiplus::Ok != oRender.GetLastStatus() )
|
||
return FALSE;
|
||
|
||
oTextRender.Draw( dCompleteness, oRender );
|
||
|
||
m_oPaintSettings.RestoreState();
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
BOOL Process_Paint_TextStatic_SetBrush(ImageStudio::Serialize::Paint::TextStatic::SetBrush* pAction)
|
||
{
|
||
if (m_oImagePaintTextStatic.Transform_SetBrush(pAction, m_dTime))
|
||
{
|
||
m_oPaintSettings.SetBrush(pAction->Brush, TRUE);
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
return FALSE;
|
||
}
|
||
BOOL Process_Paint_TextStatic_SetFont(ImageStudio::Serialize::Paint::TextStatic::SetFont* pAction)
|
||
{
|
||
if (m_oImagePaintTextStatic.Transform_SetFont(pAction, m_dTime))
|
||
{
|
||
m_oPaintSettings.SetFont(pAction->Font);
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
return FALSE;
|
||
}
|
||
BOOL Process_Paint_TextStatic_SetFormat(ImageStudio::Serialize::Paint::TextStatic::SetFormat* pAction)
|
||
{
|
||
if (m_oImagePaintTextStatic.Transform_SetFormat(pAction, m_dTime))
|
||
{
|
||
m_oPaintSettings.SetFormat(pAction->Format);
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
return FALSE;
|
||
}
|
||
BOOL Process_Paint_TextStatic_SetShadow(ImageStudio::Serialize::Paint::TextStatic::SetShadow* pAction)
|
||
{
|
||
if (m_oImagePaintTextStatic.Transform_SetShadow(pAction, m_dTime))
|
||
{
|
||
m_oPaintSettings.SetShadow(pAction->Shadow);
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
return FALSE;
|
||
}
|
||
BOOL Process_Paint_TextStatic_SetEdge(ImageStudio::Serialize::Paint::TextStatic::SetEdge* pAction)
|
||
{
|
||
if (m_oImagePaintTextStatic.Transform_SetEdge(pAction, m_dTime))
|
||
{
|
||
m_oPaintSettings.SetEdge(pAction->Edge);
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
return FALSE;
|
||
}
|
||
BOOL Process_Paint_TextStatic_DrawInRect(ImageStudio::Serialize::Paint::TextStatic::DrawInRect* pAction)
|
||
{
|
||
IUnknown* pResult = NULL;
|
||
IUnknown* pSource = m_oSources.Get( pAction->SourceId );
|
||
if( !pSource )
|
||
return TRUE;
|
||
|
||
pSource->AddRef();
|
||
m_oSources.Clear( 0 );
|
||
|
||
if (!m_oImagePaintTextStatic.Transform_DrawInRect(pAction, m_dTime, pSource, pResult))
|
||
return FALSE;
|
||
|
||
m_oSources.Set( 0, pResult );
|
||
|
||
return TRUE;
|
||
}
|
||
BOOL Process_Paint_TextStatic_DrawOnEllipse(ImageStudio::Serialize::Paint::TextStatic::DrawOnEllipse* pAction)
|
||
{
|
||
IUnknown* pResult = NULL;
|
||
|
||
if (!m_oImagePaintTextStatic.Transform_DrawOnEllipse(pAction, m_dTime, m_oSources.Get( pAction->SourceId ), pResult))
|
||
return FALSE;
|
||
|
||
m_oSources.Set( 0, pResult );
|
||
|
||
return TRUE;
|
||
}
|
||
BOOL Process_Paint_TextStatic_DrawOnPolyline(ImageStudio::Serialize::Paint::TextStatic::DrawOnPolyline* pAction)
|
||
{
|
||
IUnknown* pResult = NULL;
|
||
|
||
if (!m_oImagePaintTextStatic.Transform_DrawOnPolyline(pAction, m_dTime, m_oSources.Get( pAction->SourceId ), pResult))
|
||
return FALSE;
|
||
|
||
m_oSources.Set( 0, pResult );
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
BOOL Process_Paint_TextDynamic_SetBrush(ImageStudio::Serialize::Paint::TextDynamic::SetBrush* pAction)
|
||
{
|
||
if (m_oImagePaintTextDynamic.Transform_SetBrush(pAction, m_dTime))
|
||
{
|
||
m_oPaintSettings.SetBrush(pAction->Brush, TRUE);
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
return FALSE;
|
||
}
|
||
BOOL Process_Paint_TextDynamic_SetFont(ImageStudio::Serialize::Paint::TextDynamic::SetFont* pAction)
|
||
{
|
||
if (m_oImagePaintTextDynamic.Transform_SetFont(pAction, m_dTime))
|
||
{
|
||
m_oPaintSettings.SetFont(pAction->Font);
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
return FALSE;
|
||
}
|
||
BOOL Process_Paint_TextDynamic_SetShadow(ImageStudio::Serialize::Paint::TextDynamic::SetShadow* pAction)
|
||
{
|
||
if (m_oImagePaintTextDynamic.Transform_SetShadow(pAction, m_dTime))
|
||
{
|
||
m_oPaintSettings.SetShadow(pAction->Shadow);
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
return FALSE;
|
||
}
|
||
BOOL Process_Paint_TextDynamic_SetEdge(ImageStudio::Serialize::Paint::TextDynamic::SetEdge* pAction)
|
||
{
|
||
if (m_oImagePaintTextDynamic.Transform_SetEdge(pAction, m_dTime))
|
||
{
|
||
m_oPaintSettings.SetEdge(pAction->Edge);
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
return FALSE;
|
||
}
|
||
BOOL Process_Paint_TextDynamic_Start(ImageStudio::Serialize::Paint::TextDynamic::Start* pAction)
|
||
{
|
||
return m_oImagePaintTextDynamic.Transform_Start(pAction, m_dTime, m_oSources.Get( pAction->SourceId ));
|
||
}
|
||
BOOL Process_Paint_TextDynamic_Stop(ImageStudio::Serialize::Paint::TextDynamic::Stop* pAction)
|
||
{
|
||
return m_oImagePaintTextDynamic.Transform_Stop(pAction, m_dTime);
|
||
}
|
||
BOOL Process_Paint_TextDynamic_Render(ImageStudio::Serialize::Paint::TextDynamic::Render* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
IUnknown* pResult = NULL;
|
||
|
||
if (!m_oImagePaintTextDynamic.Transform_Render(pAction, m_dTime, m_oSources.Get( pAction->SourceId ), pResult))
|
||
return FALSE;
|
||
|
||
m_oSources.Set( 0, pResult );
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
BOOL Process_Compose_Render(ImageStudio::Serialize::Compose::Render* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = 0;
|
||
if (pAction->Time > 0)
|
||
dCompleteness = m_dTime/pAction->Time;
|
||
else
|
||
dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
|
||
if (dCompleteness < 0.0001)
|
||
return TRUE;
|
||
|
||
m_oImageComposer.m_dwBaseRnd = GetBaseRandom( pAction->BaseRandom );
|
||
|
||
int nRetCode = Core::COM::COM_ImageComposition(m_oSources.Get( 1 ), m_oSources.Get( 2 ), m_oSources.Get( 0 ), pAction->TilesWidth, pAction->TilesHeight, pAction->EffectID, dCompleteness, &m_oImageComposer);
|
||
|
||
return Core::c_nErrorNone == nRetCode;
|
||
}
|
||
|
||
BOOL Process_Paint_Text_AnimatedText(ImageStudio::Serialize::Paint::Text::AnimatedText* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
double dCompleteness = pAction->GetCompletenessStage(m_dTime);
|
||
//if (dCompleteness < 0.0001 || dCompleteness > 2.9999)
|
||
// return TRUE;
|
||
|
||
if (dCompleteness <= 0 || dCompleteness >= 3)
|
||
return TRUE;
|
||
|
||
Gdiplus::Bitmap* pBitmap = m_oSources.GetBitmap( pAction->SourceId );
|
||
if( !pBitmap )
|
||
return FALSE;
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !GetMetricMultiplier( pBitmap, pAction->GetMetric(), dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> m_oCache - <20><><EFBFBD><EFBFBD> TextPainter <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||
int nSessionID = pAction->GetSessionID();
|
||
ImageStudio::Caching::CCacheItem* pCacheItem = m_oCache.GetAt(nSessionID);
|
||
if (NULL == pCacheItem || ImageStudio::Caching::c_nTypePointer != pCacheItem->GetType() || pAction->GetAnimationID(1) != ImageStudio::Serialize::Paint::Text::c_nAnimatedTextRectangle )
|
||
{
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
m_oPaintSettings.SaveState();
|
||
|
||
m_oPaintSettings.SetFont(pAction->GetFont());
|
||
m_oPaintSettings.SetBrush(pAction->GetBrush(), FALSE);
|
||
m_oPaintSettings.SetShadow(pAction->GetShadow());
|
||
m_oPaintSettings.SetEdge(pAction->GetEdge());
|
||
|
||
// <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
Painter::CFont& oFont = m_oPaintSettings.GetFont();
|
||
double dNewFontSize = oFont.Size * dMetricX;
|
||
oFont.SetFontSize(dNewFontSize);
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||
BSTR bstrText = pAction->GetText().AllocSysString();
|
||
int nLength = pAction->GetText().GetLength();
|
||
|
||
double dLeft = dMetricX * pAction->GetRectLeft();
|
||
double dTop = dMetricY * pAction->GetRectTop();
|
||
double dRight = dMetricX * pAction->GetRectRight();
|
||
double dBottom = dMetricY * pAction->GetRectBottom();
|
||
|
||
Gdiplus::Font* pFont = m_oPaintSettings.GetFont().GetFont();
|
||
|
||
int nAlignVertical = pAction->GetFont().IsValidStringAlignmentVertical() ? pAction->GetFont().GetStringAlignmentVertical() : Gdiplus::StringAlignmentNear;
|
||
int nAlignHorizontal = pAction->GetFont().IsValidStringAlignmentHorizontal() ? pAction->GetFont().GetStringAlignmentHorizontal() : Gdiplus::StringAlignmentNear;
|
||
double dRotateAngle = pAction->GetFont().IsValidAngle() ? pAction->GetFont().GetAngle() : 0;
|
||
|
||
double dImageWidth = 0;
|
||
double dImageHeight = 0;
|
||
GetMetricMultiplier( pBitmap, 2, dImageWidth, dImageHeight );
|
||
|
||
int nFrameWidth = (pAction->m_bUseFrameOnly > 0) ? Round(dImageWidth) : 0;
|
||
int nFrameHeight = (pAction->m_bUseFrameOnly > 0) ? Round(dImageHeight) : 0;
|
||
|
||
if ( pAction->IsEvaluateRect() )
|
||
{
|
||
Gdiplus::Bitmap oImage( int(dImageWidth), int(dImageHeight), PixelFormat32bppARGB);
|
||
if( Gdiplus::Ok == oImage.GetLastStatus() )
|
||
{
|
||
Gdiplus::Graphics oRender( &oImage );
|
||
if( Gdiplus::Ok == oRender.GetLastStatus() )
|
||
{
|
||
|
||
Gdiplus::RectF oRect;
|
||
m_oPaintSettings.GetBrush().GetTextRect(bstrText, &oRender, m_oPaintSettings.GetFont().GetFont(), 0, 0, &oRect);
|
||
|
||
dBottom = dTop + oRect.Height;
|
||
dRight = dLeft + oRect.Width;
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
int nAlignType = int(pAction->GetAlignType());
|
||
|
||
if ( nAlignType >= 0 )
|
||
{
|
||
double dRectHeight = dBottom - dTop;
|
||
double dRectWidth = dRight - dLeft;
|
||
|
||
double dXMargin = (double)pAction->GetMarginX();
|
||
double dYMargin = (double)pAction->GetMarginY();
|
||
|
||
|
||
if ( 0 != dRotateAngle )
|
||
{
|
||
double dXOld = dRectWidth / 2;
|
||
double dYOld = dRectHeight / 2;
|
||
|
||
|
||
double dAngle = dRotateAngle * 3.141592653589793 / 180;
|
||
|
||
double dX1 = fabs( dXOld * cos(dAngle) - dYOld * sin(dAngle) );
|
||
double dY1 = fabs( dXOld * sin(dAngle) + dYOld * cos(dAngle) );
|
||
|
||
double dX2 = fabs( dXOld * cos(dAngle) + dYOld * sin(dAngle) );
|
||
double dY2 = fabs( dXOld * sin(dAngle) - dYOld * cos(dAngle) );
|
||
|
||
|
||
dXMargin += max( dX1, dX2 ) - dXOld;
|
||
dYMargin += max( dY1, dY2 ) - dYOld;
|
||
|
||
}
|
||
|
||
switch (nAlignType)
|
||
{
|
||
case 0: dLeft = dXMargin; dTop = dYMargin; break;
|
||
case 1: dLeft = dImageWidth / 2 - dRectWidth / 2; dTop = dYMargin; break;
|
||
case 2: dLeft = dImageWidth - dRectWidth - dXMargin; dTop = dYMargin; break;
|
||
case 3: dLeft = dXMargin; dTop = dImageHeight / 2 - dRectHeight / 2; break;
|
||
case 4: dLeft = dImageWidth / 2 - dRectWidth / 2; dTop = dImageHeight / 2 - dRectHeight / 2; break;
|
||
case 5: dLeft = dImageWidth - dRectWidth - dXMargin; dTop = dImageHeight / 2 - dRectHeight / 2; break;
|
||
case 6: dLeft = dXMargin; dTop = dImageHeight - dRectHeight - dYMargin; break;
|
||
case 7: dLeft = dImageWidth / 2 - dRectWidth / 2; dTop = dImageHeight - dRectHeight - dYMargin; break;
|
||
case 8: dLeft = dImageWidth - dRectWidth - dXMargin; dTop = dImageHeight - dRectHeight - dYMargin; break;
|
||
}
|
||
|
||
dRight = dLeft + dRectWidth;
|
||
dBottom = dTop + dRectHeight;
|
||
|
||
}
|
||
|
||
Gdiplus::RectF oLayoutRect( float(dLeft), float(dTop), float(dRight - dLeft), float(dBottom - dTop) );
|
||
|
||
|
||
Painter::CEdgeText& oEdge = m_oPaintSettings.GetEdge();
|
||
double dNewDistance = oEdge.Dist * dMetricX;
|
||
oEdge.SetDistance( dNewDistance );
|
||
|
||
Painter::CShadow& oShadow = m_oPaintSettings.GetShadow();
|
||
double dNewDistanceX = oShadow.DistanceX * dMetricX;
|
||
double dNewDistanceY = oShadow.DistanceY * dMetricY;
|
||
oShadow.SetDistanceX( dNewDistanceX );
|
||
oShadow.SetDistanceY( dNewDistanceY );
|
||
|
||
double dNewBlurSize = oShadow.BlurSize * dMetricX;
|
||
if( dNewBlurSize > 100 )
|
||
dNewBlurSize = 100;
|
||
oShadow.SetBlurSize( dNewBlurSize );
|
||
|
||
Painter::CBrush& oFillBrush = m_oPaintSettings.GetBrush();
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
Painter::CTexture* pTexture = NULL;
|
||
IUnknown* pTextureInterface = m_oImageCache.GetImage( oFillBrush.TexturePath );
|
||
if( pTextureInterface )
|
||
{
|
||
BYTE* pBGRA = NULL;
|
||
int nWidth = 0;
|
||
int nHeight = 0;
|
||
|
||
if( Core::c_nErrorNone == Core::COM::COM_GetBGRAImageFromInterface( pTextureInterface, pBGRA, nWidth, nHeight ) )
|
||
{
|
||
pTexture = new Painter::CTexture();
|
||
if( pTexture )
|
||
{
|
||
Gdiplus::Rect oImageRect( 0, 0, nWidth, nHeight );
|
||
|
||
ImageStudio::Serialize::Paint::Structures::Brush& brush = pAction->GetBrush();
|
||
if( brush.GetRectable() )
|
||
{
|
||
Gdiplus::RectF oRect = brush.GetRect();
|
||
Gdiplus::Rect oBrushRect(
|
||
int(oRect.X * nWidth + 0.5),
|
||
int(oRect.Y * nHeight + 0.5),
|
||
int(oRect.Width * nWidth + 0.5),
|
||
int(oRect.Height * nHeight + 0.5) );
|
||
|
||
if( oBrushRect.Intersect( oImageRect ) )
|
||
{
|
||
pBGRA += (oBrushRect.Y * nWidth + oBrushRect.X) * 4;
|
||
oImageRect.Width = oBrushRect.Width;
|
||
oImageRect.Height = oBrushRect.Height;
|
||
}
|
||
}
|
||
|
||
pTexture->Path = oFillBrush.TexturePath.MakeLower();
|
||
pTexture->Bitmap = NULL;
|
||
pTexture->BitmapData = pBGRA;
|
||
pTexture->bFlipVertical = FALSE;
|
||
pTexture->bAttach = TRUE;
|
||
pTexture->nWidth = oImageRect.Width;
|
||
pTexture->nHeight = oImageRect.Height;
|
||
pTexture->nStride = nWidth*4;
|
||
|
||
pTextureInterface->AddRef();
|
||
}
|
||
}
|
||
}
|
||
|
||
if( pAction->GetAnimationID(1) == ImageStudio::Serialize::Paint::Text::c_nAnimatedTextRectangle )
|
||
{
|
||
ImageStudio::Paint::Text::CTextPainter2* pPainter = new ImageStudio::Paint::Text::CTextPainter2();
|
||
if( pPainter )
|
||
{
|
||
pPainter->CreateText( bstrText, *pFont, oLayoutRect, nAlignHorizontal, nAlignVertical, pAction->m_bSimpleLine, nFrameWidth, nFrameHeight );
|
||
pPainter->CreateEffects( pAction->GetAnimationID(0), pAction->GetAnimationID(2), pAction->m_nTypeEffects );
|
||
|
||
pPainter->m_oTextureManager.Add( pTexture );
|
||
pPainter->pImage = pTextureInterface;
|
||
|
||
pPainter->SetFillBrush( oFillBrush );
|
||
pPainter->SetEdge( oEdge );
|
||
pPainter->SetShadow( oShadow );
|
||
pPainter->m_nFillMode = pAction->m_nFillMode;
|
||
pPainter->m_fAngle = float(dRotateAngle);
|
||
|
||
pPainter->m_dStartX = pAction->m_dTextDirX1;
|
||
pPainter->m_dStartY = pAction->m_dTextDirY1;
|
||
pPainter->m_dEndX = pAction->m_dTextDirX2;
|
||
pPainter->m_dEndY = pAction->m_dTextDirY2;
|
||
}
|
||
|
||
m_oCache.Add( nSessionID, pPainter );
|
||
pCacheItem = pPainter;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
m_oPaintSettings.RestoreState();
|
||
}
|
||
else
|
||
{
|
||
ImageStudio::Paint::Text::CTextPainter* pPainter = (ImageStudio::Paint::Text::CTextPainter*)pCacheItem;
|
||
if( NULL == pPainter )
|
||
{
|
||
pPainter = new ImageStudio::Paint::Text::CTextPainter();
|
||
|
||
m_oCache.Add( nSessionID, pPainter );
|
||
pCacheItem = pPainter;
|
||
}
|
||
|
||
if( pPainter )
|
||
{
|
||
m_oPaintSettings.GetTextureManager().Add( pTexture );
|
||
|
||
pPainter->SetPaintState(&m_oPaintSettings);
|
||
pPainter->SetTextureManager(&m_oPaintSettings.GetTextureManager());
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> pAction
|
||
if (pAction->GetAnimationID(1) == ImageStudio::Serialize::Paint::Text::c_nAnimatedTextLine)
|
||
{
|
||
pPainter->TextCreate(bstrText, nLength, *pFont);
|
||
pPainter->TextPlaceLine(dLeft, dTop);
|
||
}
|
||
else if (pAction->GetAnimationID(1) == ImageStudio::Serialize::Paint::Text::c_nAnimatedTextEllipse)
|
||
{
|
||
pPainter->TextCreate(bstrText, nLength, *pFont);
|
||
pPainter->TextPlaceEllipse(dLeft, dTop, dRight, dBottom, pAction->GetSettingsEllipse().GetAngleStart());
|
||
}
|
||
else if (pAction->GetAnimationID(1) == ImageStudio::Serialize::Paint::Text::c_nAnimatedTextPolyline)
|
||
{
|
||
// TODO: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
pPainter->TextCreate(bstrText, nLength, *pFont);
|
||
pPainter->TextPlacePolyline(pAction->GetSettingsPolyline().GetPoints());
|
||
}
|
||
else
|
||
{
|
||
pPainter->TextCreate(bstrText, nLength, *pFont, 0, 0, dRight - dLeft, dBottom - dTop, nAlignVertical, nAlignHorizontal, pAction->IsTextClipped());
|
||
pPainter->TextPlaceRectangle(dLeft, dTop, dRight, dBottom, nAlignVertical, nAlignHorizontal, dRotateAngle);
|
||
}
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||
pPainter->TextTransform(pAction->GetAnimationID(0), pAction->GetAnimationID(1), pAction->GetAnimationID(2), 0, 1);
|
||
}
|
||
}
|
||
|
||
SysFreeString( bstrText );
|
||
}
|
||
|
||
int nResult = Core::c_nErrorNone;
|
||
|
||
Gdiplus::Graphics oRender( pBitmap );
|
||
if( Gdiplus::Ok != oRender.GetLastStatus() )
|
||
return FALSE;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||
if( pAction->GetAnimationID(1) == ImageStudio::Serialize::Paint::Text::c_nAnimatedTextRectangle )
|
||
{
|
||
ImageStudio::Paint::Text::CTextPainter2* pPainter = (ImageStudio::Paint::Text::CTextPainter2*)pCacheItem;
|
||
pPainter->Draw( dCompleteness, oRender );
|
||
}
|
||
else
|
||
{
|
||
ImageStudio::Paint::Text::CTextPainter* pPainter = (ImageStudio::Paint::Text::CTextPainter*)pCacheItem;
|
||
pPainter->TextDraw( dCompleteness, oRender );
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
m_oPaintSettings.RestoreState();
|
||
}
|
||
|
||
return (Core::c_nErrorNone == nResult);
|
||
}
|
||
|
||
BOOL Process_Paint_Text_WritingText(ImageStudio::Serialize::Paint::Text::EffectWritingText* pAction)
|
||
{
|
||
if (!pAction)
|
||
return FALSE;
|
||
|
||
//double dCompleteness = pAction->GetCompletenessStage(m_dTime);
|
||
|
||
//if (dCompleteness <= 0 || dCompleteness >= 3)
|
||
// return TRUE;
|
||
double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
if (dCompleteness <= 0 )
|
||
return TRUE;
|
||
|
||
Gdiplus::Bitmap* pBitmap = m_oSources.GetBitmap( pAction->SourceId );
|
||
if( !pBitmap )
|
||
return FALSE;
|
||
|
||
double dMetricX, dMetricY;
|
||
if( !GetMetricMultiplier( pBitmap, pAction->GetMetric(), dMetricX, dMetricY ) )
|
||
return FALSE;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> m_oCache - <20><><EFBFBD><EFBFBD> TextPainter <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||
int nSessionID = pAction->GetSessionID();
|
||
ImageStudio::Caching::CCacheItem* pCacheItem = m_oCache.GetAt(nSessionID);
|
||
if (NULL == pCacheItem || ImageStudio::Caching::c_nTypePointer != pCacheItem->GetType() )
|
||
{
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
m_oPaintSettings.SaveState();
|
||
|
||
m_oPaintSettings.SetFont(pAction->GetFont());
|
||
m_oPaintSettings.SetEdge(pAction->GetEdge());
|
||
|
||
// <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
Painter::CFont& oFont = m_oPaintSettings.GetFont();
|
||
double dNewFontSize = oFont.Size * dMetricX;
|
||
oFont.SetFontSize(dNewFontSize);
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||
BSTR bstrText = pAction->GetText().AllocSysString();
|
||
int nLength = pAction->GetText().GetLength();
|
||
|
||
double dLeft = dMetricX * pAction->GetRectLeft();
|
||
double dTop = dMetricY * pAction->GetRectTop();
|
||
double dRight = dMetricX * pAction->GetRectRight();
|
||
double dBottom = dMetricY * pAction->GetRectBottom();
|
||
|
||
Gdiplus::Font* pFont = m_oPaintSettings.GetFont().GetFont();
|
||
|
||
int nAlignVertical = pAction->GetFont().IsValidStringAlignmentVertical() ? pAction->GetFont().GetStringAlignmentVertical() : Gdiplus::StringAlignmentNear;
|
||
int nAlignHorizontal = pAction->GetFont().IsValidStringAlignmentHorizontal() ? pAction->GetFont().GetStringAlignmentHorizontal() : Gdiplus::StringAlignmentNear;
|
||
double dRotateAngle = pAction->GetFont().IsValidAngle() ? pAction->GetFont().GetAngle() : 0;
|
||
|
||
//double dImageWidth = 0;
|
||
//double dImageHeight = 0;
|
||
//GetMetricMultiplier( pBitmap, 2, dImageWidth, dImageHeight );
|
||
|
||
//int nFrameWidth = Round(dImageWidth);
|
||
//int nFrameHeight = Round(dImageHeight);
|
||
|
||
Gdiplus::RectF oLayoutRect( float(dLeft), float(dTop), float(dRight - dLeft), float(dBottom - dTop) );
|
||
|
||
Painter::CEdgeText& oEdge = m_oPaintSettings.GetEdge();
|
||
double dNewDistance = oEdge.Dist * dMetricX;
|
||
oEdge.SetDistance( dNewDistance );
|
||
|
||
ImageStudio::Paint::Text::CTextPainter2* pPainter = new ImageStudio::Paint::Text::CTextPainter2();
|
||
if( pPainter )
|
||
{
|
||
pPainter->CreateText( bstrText, *pFont, oLayoutRect, nAlignHorizontal, nAlignVertical, 0x80000000, 0/*nFrameWidth*/, 0/*nFrameHeight*/ );
|
||
pPainter->CreateEffects( 0, 0, 0 );
|
||
|
||
pPainter->SetEdge( oEdge );
|
||
pPainter->m_fAngle = float(dRotateAngle);
|
||
|
||
pPainter->m_bFillText = FALSE;
|
||
pPainter->m_bDrawEdge = TRUE;
|
||
pPainter->m_bDrawShadow = FALSE;
|
||
pPainter->m_nTypeWrittingEdge = pAction->GetType() ? 2 : 1;
|
||
}
|
||
|
||
m_oCache.Add( nSessionID, pPainter );
|
||
pCacheItem = pPainter;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
m_oPaintSettings.RestoreState();
|
||
|
||
SysFreeString( bstrText );
|
||
}
|
||
|
||
Gdiplus::Graphics oRender( pBitmap );
|
||
if( Gdiplus::Ok != oRender.GetLastStatus() )
|
||
return FALSE;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||
ImageStudio::Paint::Text::CTextPainter2* pPainter = (ImageStudio::Paint::Text::CTextPainter2*)pCacheItem;
|
||
pPainter->Draw( dCompleteness, oRender );
|
||
|
||
return Core::c_nErrorNone;
|
||
}
|
||
|
||
BOOL Process_Paint_DrawImageFromFileAnimate ( ImageStudio::Serialize::Paint::Animations::DrawImageFromFileAnimate* pAction )
|
||
{
|
||
return TRUE;
|
||
|
||
//if (!pAction)
|
||
// return FALSE;
|
||
|
||
//double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
//if (dCompleteness < 0.0001)
|
||
// return TRUE;
|
||
//
|
||
//IUnknown* pInterfaceImage = NULL;
|
||
|
||
//// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> m_oCache - <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
//int nSessionID = pAction->GetSessionID();
|
||
//ImageStudio::Caching::CCacheItem* pCacheItem = m_oCache.GetAt(nSessionID);
|
||
//if (NULL != pCacheItem && ImageStudio::Caching::c_nTypeInterface == pCacheItem->GetType())
|
||
//{
|
||
// pInterfaceImage = ((ImageStudio::Caching::CCacheItemInterface*)pCacheItem)->GetInterface();
|
||
//}
|
||
//else
|
||
//{
|
||
// if( m_pFileCache )
|
||
// {
|
||
// m_pFileCache->raw_LoadImageW( _bstr_t( pAction->FilePath ), -1, -1, &pInterfaceImage );
|
||
|
||
// if( pInterfaceImage )
|
||
// //if( Core::c_nErrorNone == Core::COM::COM_LoadImage( &pInterfaceImage, pAction->FilePath ) )
|
||
// {
|
||
// ImageStudio::Caching::CCacheItemInterface* pCacheInterface = new ImageStudio::Caching::CCacheItemInterface(pInterfaceImage);
|
||
// m_oCache.Add(nSessionID, pCacheInterface);
|
||
// pInterfaceImage->Release();
|
||
// }
|
||
|
||
// }
|
||
// else
|
||
// {
|
||
// pInterfaceImage = m_oImageCache.GetImage( pAction->FilePath );
|
||
// if( pInterfaceImage )
|
||
// //if( Core::c_nErrorNone == Core::COM::COM_LoadImage( &pInterfaceImage, pAction->FilePath ) )
|
||
// {
|
||
// ImageStudio::Caching::CCacheItemInterface* pCacheInterface = new ImageStudio::Caching::CCacheItemInterface(pInterfaceImage);
|
||
// m_oCache.Add(nSessionID, pCacheInterface);
|
||
// }
|
||
// }
|
||
//}
|
||
|
||
//if( !pInterfaceImage )
|
||
// return FALSE;
|
||
|
||
//double dMetricX = 1, dMetricY = 1;
|
||
//GetMetricMultiplier( m_oSources.Get( pAction->SourceId ), pAction->Metric, dMetricX, dMetricY );
|
||
//
|
||
//double dLeft = pAction->Left * dMetricX;
|
||
//double dRight = pAction->Right * dMetricX;
|
||
//double dTop = pAction->Top * dMetricY;
|
||
//double dBottom = pAction->Bottom * dMetricY;
|
||
|
||
//ImageStudio::Paint::Animations::CImageDrawerEx oDrawerEx;
|
||
//
|
||
//return oDrawerEx.OnProcess ( m_dTime, dLeft, dRight, dTop, dBottom, dCompleteness, m_oSources.Get( pAction->SourceId ), pInterfaceImage, pAction );
|
||
}
|
||
|
||
BOOL Process_Paint_DrawPathAnimate ( ImageStudio::Serialize::Paint::Animations::DrawGraphicPathAnimate* pAction )
|
||
{
|
||
return TRUE;
|
||
|
||
//if (!pAction)
|
||
// return FALSE;
|
||
|
||
////if ( m_dTime < pAction->m_Animation.m_nTimeDelay || m_dTime > pAction->m_Animation.m_nTimeDelay + pAction->m_Animation.m_nTimeDuration || 0.0 == pAction->m_Animation.m_nTimeDuration )
|
||
//// return TRUE;
|
||
|
||
//double dCompleteness = pAction->GetCompleteness(m_dTime);
|
||
//if (dCompleteness < 0.000001)
|
||
// return TRUE;
|
||
|
||
//double dMetricX, dMetricY;
|
||
//if( !GetMetricMultiplier( m_oSources.Get( pAction->SourceId ), pAction->Metric, dMetricX, dMetricY ) )
|
||
// return FALSE;
|
||
|
||
//ImageStudio::Paint::Animations::CGraphicsPathDrawerEx oDrawerEx;
|
||
|
||
//return oDrawerEx.OnProcess ( m_dTime, m_oSources.Get( pAction->SourceId ), &m_oPaintSettings, pAction );
|
||
}
|
||
|
||
virtual int OnTransform(ImageStudio::Serialize::SerializedObject* pTransform)
|
||
{
|
||
if (!pTransform)
|
||
return TRUE;
|
||
|
||
int nCommand = pTransform->ID;
|
||
|
||
int bSuccess = FALSE; // 0 - error, 1 - ok, -1 - repeat from last safe point
|
||
|
||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> source interface <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
// <20><> (!) <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20>.<2E>. <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-source'<27>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>... <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: ImageFile-LoadImage
|
||
|
||
switch (nCommand)
|
||
{
|
||
case ImageStudio::Serialize::c_nSerializeNone:
|
||
return TRUE;
|
||
|
||
case ImageStudio::Serialize::c_nSerializeGroup: SerializedObjectTransformer_ProcessSerializedObject(SerializedGroup, pTransform, Process_Group, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeBufferClear: SerializedObjectTransformer_ProcessSerializedObject(SerializedBufferClear, pTransform, Process_BufferClear, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeBufferCopy: SerializedObjectTransformer_ProcessSerializedObject(SerializedBufferCopy, pTransform, Process_BufferCopy, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeSetAdditionalParams: SerializedObjectTransformer_ProcessSerializedObject(Core::AdditionalParams, pTransform, Process_SetAdditionalParams, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeSetParamsUseVideoCard: SerializedObjectTransformer_ProcessSerializedObject(SerializedSetParamsUseVideoCard, pTransform, Process_SetParamsUseVideoCard, bSuccess) break;
|
||
|
||
case ImageStudio::Serialize::c_nSerializeImageClear: SerializedObjectTransformer_ProcessSerializedObject(Effects::ImageClear, pTransform, Process_ImageClear, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeImageCopy: SerializedObjectTransformer_ProcessSerializedObject(Effects::ImageCopy, pTransform, Process_ImageCopy, bSuccess) break;
|
||
|
||
case ImageStudio::Serialize::c_nSerializeAdjustBrightness: SerializedObjectTransformer_ProcessSerializedObject(Effects::AdjustBrightness, pTransform, Process_Adjust_Brightness, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeAdjustBrightnessEx: SerializedObjectTransformer_ProcessSerializedObject(Effects::AdjustBrightnessEx, pTransform, Process_Adjust_BrightnessEx, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeAdjustContrast: SerializedObjectTransformer_ProcessSerializedObject(Effects::AdjustContrast, pTransform, Process_Adjust_Contrast, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeAdjustGamma: SerializedObjectTransformer_ProcessSerializedObject(Effects::AdjustGamma, pTransform, Process_Adjust_Gamma, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeAdjustEqualize: SerializedObjectTransformer_ProcessSerializedObject(Effects::AdjustEqualize, pTransform, Process_Adjust_Equalize, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeAdjustGrayscale: SerializedObjectTransformer_ProcessSerializedObject(Effects::AdjustGrayscale, pTransform, Process_Adjust_Grayscale, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeAdjustInvert: SerializedObjectTransformer_ProcessSerializedObject(Effects::AdjustInvert, pTransform, Process_Adjust_Invert, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeAdjustAutobrightness: SerializedObjectTransformer_ProcessSerializedObject(Effects::AdjustAutobrightness, pTransform, Process_Adjust_Autobrightness, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeAdjustAutocontrast: SerializedObjectTransformer_ProcessSerializedObject(Effects::AdjustAutocontrast, pTransform, Process_Adjust_Autocontrast, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeAdjustAutolevels: SerializedObjectTransformer_ProcessSerializedObject(Effects::AdjustAutolevels, pTransform, Process_Adjust_Autolevels, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeAdjustHue: SerializedObjectTransformer_ProcessSerializedObject(Effects::AdjustHue, pTransform, Process_Adjust_Hue, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeAdjustSaturation: SerializedObjectTransformer_ProcessSerializedObject(Effects::AdjustSaturation, pTransform, Process_Adjust_Saturation, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeAdjustPosterize: SerializedObjectTransformer_ProcessSerializedObject(Effects::AdjustPosterize, pTransform, Process_Adjust_Posterize, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeAdjustTemperature: SerializedObjectTransformer_ProcessSerializedObject(Effects::AdjustTemperature, pTransform, Process_Adjust_Temperature, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeAdjustColorize: SerializedObjectTransformer_ProcessSerializedObject(Effects::AdjustColorize, pTransform, Process_Adjust_Colorize, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeAdjustThreshold: SerializedObjectTransformer_ProcessSerializedObject(Effects::AdjustThreshold, pTransform, Process_Adjust_Threshold, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeAdjustSepia: SerializedObjectTransformer_ProcessSerializedObject(Effects::AdjustSepia, pTransform, Process_Adjust_Sepia, bSuccess) break;
|
||
|
||
case ImageStudio::Serialize::c_nSerializeAdjustRecovery: SerializedObjectTransformer_ProcessSerializedObject(Effects::AdjustRecovery, pTransform, Process_Adjust_Recovery, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeAdjustFillLight: SerializedObjectTransformer_ProcessSerializedObject(Effects::AdjustFillLight, pTransform, Process_Adjust_FillLight, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeAdjustExposure: SerializedObjectTransformer_ProcessSerializedObject(Effects::AdjustExposure, pTransform, Process_Adjust_Exposure, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeAdjustBlacks: SerializedObjectTransformer_ProcessSerializedObject(Effects::AdjustBlacks, pTransform, Process_Adjust_Blacks, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeAdjustHighLight: SerializedObjectTransformer_ProcessSerializedObject(Effects::AdjustHighLight, pTransform, Process_Adjust_HighLight, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeAdjustShadows: SerializedObjectTransformer_ProcessSerializedObject(Effects::AdjustShadows, pTransform, Process_Adjust_Shadows, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeAdjustWhiteBalance: SerializedObjectTransformer_ProcessSerializedObject(Effects::AdjustWhiteBalance, pTransform, Process_Adjust_WhiteBalance, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeAdjustClarity: SerializedObjectTransformer_ProcessSerializedObject(Effects::AdjustClarity, pTransform, Process_Adjust_Clarity, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeAdjustVibrance: SerializedObjectTransformer_ProcessSerializedObject(Effects::AdjustVibrance, pTransform, Process_Adjust_Vibrance, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeAdjustAutoWhiteBalance: SerializedObjectTransformer_ProcessSerializedObject(Effects::AdjustAutoWhiteBalance, pTransform, Process_Adjust_AutoWhiteBalance, bSuccess) break;
|
||
|
||
case ImageStudio::Serialize::c_nSerializeEffectBlur: SerializedObjectTransformer_ProcessSerializedObject(Effects::EffectBlur, pTransform, Process_Effect_Blur, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeEffectSharpen: SerializedObjectTransformer_ProcessSerializedObject(Effects::EffectSharpen, pTransform, Process_Effect_Sharpen, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeEffectMosaic: SerializedObjectTransformer_ProcessSerializedObject(Effects::EffectMosaic, pTransform, Process_Effect_Mosaic, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeEffectGaussianBlur: SerializedObjectTransformer_ProcessSerializedObject(Effects::EffectGaussianBlur, pTransform, Process_Effect_GaussianBlur, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeEffectNoise: SerializedObjectTransformer_ProcessSerializedObject(Effects::EffectNoise, pTransform, Process_Effect_Noise, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeEffectDiffuse: SerializedObjectTransformer_ProcessSerializedObject(Effects::EffectDiffuse, pTransform, Process_Effect_Diffuse, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeEffectMotionBlur: SerializedObjectTransformer_ProcessSerializedObject(Effects::EffectMotionBlur, pTransform, Process_Effect_MotionBlur, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeEffectEmboss: SerializedObjectTransformer_ProcessSerializedObject(Effects::EffectEmboss, pTransform, Process_Effect_Emboss, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeEffectKenBurns: SerializedObjectTransformer_ProcessSerializedObject(Effects::EffectKenBurns, pTransform, Process_Effect_KenBurns, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeEffectMinimal: SerializedObjectTransformer_ProcessSerializedObject(Effects::EffectMinimal, pTransform, Process_Effect_Minimal, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeEffectMaximal: SerializedObjectTransformer_ProcessSerializedObject(Effects::EffectMaximal, pTransform, Process_Effect_Maximal, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeEffectDeinterlace: SerializedObjectTransformer_ProcessSerializedObject(Effects::EffectDeinterlace, pTransform, Process_Effect_Deinterlace, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeEffectMedian: SerializedObjectTransformer_ProcessSerializedObject(Effects::EffectMedian, pTransform, Process_Effect_Median, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeEffectChromoKeyRange: SerializedObjectTransformer_ProcessSerializedObject(Effects::EffectChromoKeyRange, pTransform, Process_Effect_ChromoKey_Range, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeEffectChromoKeyLevel: SerializedObjectTransformer_ProcessSerializedObject(Effects::EffectChromoKeyLevel, pTransform, Process_Effect_ChromoKey_Level, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeEffectCinema: SerializedObjectTransformer_ProcessSerializedObject(Effects::EffectCinema, pTransform, Process_Effect_Cinema, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeEffectGlass: SerializedObjectTransformer_ProcessSerializedObject(Effects::EffectGlass, pTransform, Process_Effect_Glass, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeEffectGlassMosaic: SerializedObjectTransformer_ProcessSerializedObject(Effects::EffectGlassMosaic, pTransform, Process_Effect_GlassMosaic, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeEffectPencilSketch: SerializedObjectTransformer_ProcessSerializedObject(Effects::EffectPencilSketch, pTransform, Process_Effect_PencilSketch, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeEffectWaterColor: SerializedObjectTransformer_ProcessSerializedObject(Effects::EffectWaterColor, pTransform, Process_Effect_WaterColor, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeEffectGlow: SerializedObjectTransformer_ProcessSerializedObject(Effects::EffectGlow, pTransform, Process_Effect_Glow, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeEffectTVSimulation: SerializedObjectTransformer_ProcessSerializedObject(Effects::EffectTVSimulation, pTransform, Process_Effect_TVSimulation, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeEffectGrayOut: SerializedObjectTransformer_ProcessSerializedObject(Effects::EffectGrayOut, pTransform, Process_Effect_GrayOut, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeEffectWind: SerializedObjectTransformer_ProcessSerializedObject(Effects::EffectWind, pTransform, Process_Effect_Wind, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeEffectNewsprint: SerializedObjectTransformer_ProcessSerializedObject(Effects::EffectNewsprint, pTransform, Process_Effect_Newsprint, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeEffectSnow: SerializedObjectTransformer_ProcessSerializedObject(Effects::EffectSnow, pTransform, Process_Effect_Snow, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeEffectJpegCompression: SerializedObjectTransformer_ProcessSerializedObject(Effects::EffectJpegCompression, pTransform, Process_Effect_JpegCompression, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeEffectSoftFocus: SerializedObjectTransformer_ProcessSerializedObject(Effects::EffectSoftFocus, pTransform, Process_Effect_SoftFocus, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeEffectOldPhoto: SerializedObjectTransformer_ProcessSerializedObject(Effects::EffectOldPhoto, pTransform, Process_Effect_OldPhoto, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeEffectVignette: SerializedObjectTransformer_ProcessSerializedObject(Effects::EffectVignette, pTransform, Process_Effect_Vignette, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeEffectPostCrop: SerializedObjectTransformer_ProcessSerializedObject(Effects::EffectPostCrop, pTransform, Process_Effect_PostCrop, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeEffectSetAlphaChannel: SerializedObjectTransformer_ProcessSerializedObject(Effects::EffectSetAlphaChannel, pTransform, Process_Effect_SetAlphaChannel, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeEffectZoomingSphere: SerializedObjectTransformer_ProcessSerializedObject(Effects::EffectZoomingSphere, pTransform, Process_Effect_ZoomingSphere, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeEffectWaterMirrow: SerializedObjectTransformer_ProcessSerializedObject(Effects::EffectWaterMirrow, pTransform, Process_Effect_WaterMirrow, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeEffectShapeMosaic: SerializedObjectTransformer_ProcessSerializedObject(Effects::EffectShapeMosaic, pTransform, Process_Effect_ShapeMosaic, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeEffectParticles: SerializedObjectTransformer_ProcessSerializedObject(Effects::EffectParticles, pTransform, Process_Effect_Particles, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeEffectCanvas: SerializedObjectTransformer_ProcessSerializedObject(Effects::EffectCanvas, pTransform, Process_Effect_Canvas, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeEffectGlow2: SerializedObjectTransformer_ProcessSerializedObject(Effects::EffectGlow2, pTransform, Process_Effect_Glow2, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeEffectColorExchange: SerializedObjectTransformer_ProcessSerializedObject(Effects::EffectColorExchange, pTransform, Process_Effect_ColorExchange, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeEffectAnaglyph3d: SerializedObjectTransformer_ProcessSerializedObject(Effects::EffectAnaglyph3d, pTransform, Process_Effect_Anaglyph3d, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeEffectFog: SerializedObjectTransformer_ProcessSerializedObject(Paint::Common::DrawFog, pTransform, Process_Paint_DrawFog, bSuccess) break;
|
||
|
||
case ImageStudio::Serialize::c_nSerializeTransformFlip: SerializedObjectTransformer_ProcessSerializedObject(Effects::TransformFlip, pTransform, Process_Transform_Flip, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeTransformFlip2: SerializedObjectTransformer_ProcessSerializedObject(Effects::TransformFlip2, pTransform, Process_Transform_Flip2, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeTransformPerspective: SerializedObjectTransformer_ProcessSerializedObject(Effects::TransformPerspective, pTransform, Process_Transform_Perspective, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeTransformSkew: SerializedObjectTransformer_ProcessSerializedObject(Effects::TransformSkew, pTransform, Process_Transform_Skew, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeTransformShift: SerializedObjectTransformer_ProcessSerializedObject(Effects::TransformShift, pTransform, Process_Transform_Shift, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeTransformRotate: SerializedObjectTransformer_ProcessSerializedObject(Effects::TransformRotate, pTransform, Process_Transform_Rotate, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeTransformRotateAdvanced: SerializedObjectTransformer_ProcessSerializedObject(Effects::TransformRotateAdvanced, pTransform, Process_Transform_RotateAdvanced, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeTransformRotateSimple: SerializedObjectTransformer_ProcessSerializedObject(Effects::TransformRotateSimple, pTransform, Process_Transform_RotateSimple, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeTransformResample: SerializedObjectTransformer_ProcessSerializedObject(Effects::TransformResample, pTransform, Process_Transform_Resample, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeTransformZoom: SerializedObjectTransformer_ProcessSerializedObject(Effects::TransformZoom, pTransform, Process_Transform_Zoom, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeTransformZoomLinear: SerializedObjectTransformer_ProcessSerializedObject(Effects::TransformZoomLinear, pTransform, Process_Transform_ZoomLinear, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeTransformMirror: SerializedObjectTransformer_ProcessSerializedObject(Effects::TransformMirror, pTransform, Process_Transform_Mirror, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeTransformResize: SerializedObjectTransformer_ProcessSerializedObject(Effects::TransformResize, pTransform, Process_Transform_Resize, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeTransformTwirl: SerializedObjectTransformer_ProcessSerializedObject(Effects::TransformTwirl, pTransform, Process_Transform_Twirl, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeTransformSphere: SerializedObjectTransformer_ProcessSerializedObject(Effects::TransformSphere, pTransform, Process_Transform_Sphere, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeTransformCylinder: SerializedObjectTransformer_ProcessSerializedObject(Effects::TransformCylinder, pTransform, Process_Transform_Cylinder, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeTransformWave: SerializedObjectTransformer_ProcessSerializedObject(Effects::TransformWave, pTransform, Process_Transform_Wave, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeTransformRipple: SerializedObjectTransformer_ProcessSerializedObject(Effects::TransformRipple, pTransform, Process_Transform_Ripple, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeTransformRotateSpecial: SerializedObjectTransformer_ProcessSerializedObject(Effects::TransformRotateSpecial, pTransform, Process_Transform_RotateSpecial, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeTransformLinear: SerializedObjectTransformer_ProcessSerializedObject(Effects::TransformLinear, pTransform, Process_Transform_Linear, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeTransformGlassTile: SerializedObjectTransformer_ProcessSerializedObject(Effects::TransformGlassTile, pTransform, Process_Transform_GlassTile, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeTransformBrokenGlass: SerializedObjectTransformer_ProcessSerializedObject(Effects::TransformBrokenGlass, pTransform, Process_Transform_BrokenGlass, bSuccess) break;
|
||
|
||
case ImageStudio::Serialize::c_nSerializeFilterPrewitt: SerializedObjectTransformer_ProcessSerializedObject(Effects::FilterPrewitt, pTransform, Process_Filter_Prewitt, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeFilterScharr: SerializedObjectTransformer_ProcessSerializedObject(Effects::FilterScharr, pTransform, Process_Filter_Scharr, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeFilterSobel: SerializedObjectTransformer_ProcessSerializedObject(Effects::FilterSobel, pTransform, Process_Filter_Sobel, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeFilterRoberts: SerializedObjectTransformer_ProcessSerializedObject(Effects::FilterRoberts, pTransform, Process_Filter_Roberts, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeFilterLaplace: SerializedObjectTransformer_ProcessSerializedObject(Effects::FilterLaplace, pTransform, Process_Filter_Laplace, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeFilterHipass: SerializedObjectTransformer_ProcessSerializedObject(Effects::FilterHipass, pTransform, Process_Filter_Hipass, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeFilterLowpass: SerializedObjectTransformer_ProcessSerializedObject(Effects::FilterLowpass, pTransform, Process_Filter_Lowpass, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeFilterBlur: SerializedObjectTransformer_ProcessSerializedObject(Effects::FilterBlur, pTransform, Process_Filter_Blur, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeFilterCanny: SerializedObjectTransformer_ProcessSerializedObject(Effects::FilterCanny, pTransform, Process_Filter_Canny, bSuccess) break;
|
||
|
||
case ImageStudio::Serialize::c_nSerializeFileLoadImage: SerializedObjectTransformer_ProcessSerializedObject(File::FileLoadImage, pTransform, Process_File_LoadImage, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeFileLoadScreenshot: SerializedObjectTransformer_ProcessSerializedObject(File::FileLoadScreenshot, pTransform, Process_File_LoadScreenshot, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeFileLoadRaw: SerializedObjectTransformer_ProcessSerializedObject(File::FileLoadRaw, pTransform, Process_File_LoadRaw, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeFileSaveAsBmp: SerializedObjectTransformer_ProcessSerializedObject(File::FileSaveAsBmp, pTransform, Process_File_SaveAsBmp, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeFileSaveAsGif: SerializedObjectTransformer_ProcessSerializedObject(File::FileSaveAsGif, pTransform, Process_File_SaveAsGif, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeFileSaveAsJpeg: SerializedObjectTransformer_ProcessSerializedObject(File::FileSaveAsJpeg, pTransform, Process_File_SaveAsJpeg, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeFileSaveAsPng: SerializedObjectTransformer_ProcessSerializedObject(File::FileSaveAsPng, pTransform, Process_File_SaveAsPng, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeFileSaveAsTiff: SerializedObjectTransformer_ProcessSerializedObject(File::FileSaveAsTiff, pTransform, Process_File_SaveAsTiff, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeFileSaveAsWmf: SerializedObjectTransformer_ProcessSerializedObject(File::FileSaveAsWmf, pTransform, Process_File_SaveAsWmf, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeFileSaveAsEmf: SerializedObjectTransformer_ProcessSerializedObject(File::FileSaveAsEmf, pTransform, Process_File_SaveAsEmf, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeFileSaveAsPcx: SerializedObjectTransformer_ProcessSerializedObject(File::FileSaveAsPcx, pTransform, Process_File_SaveAsPcx, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeFileSaveAsTga: SerializedObjectTransformer_ProcessSerializedObject(File::FileSaveAsTga, pTransform, Process_File_SaveAsTga, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeFileSaveAsRas: SerializedObjectTransformer_ProcessSerializedObject(File::FileSaveAsRas, pTransform, Process_File_SaveAsRas, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeFileSaveAsIPod: SerializedObjectTransformer_ProcessSerializedObject(File::FileSaveAsIPod, pTransform, Process_File_SaveAsIPod, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeFileSaveAsPsd: SerializedObjectTransformer_ProcessSerializedObject(File::FileSaveAsPsd, pTransform, Process_File_SaveAsPsd, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeFileSaveAsJp2: SerializedObjectTransformer_ProcessSerializedObject(File::FileSaveAsJp2, pTransform, Process_File_SaveAsJp2, bSuccess) break;
|
||
|
||
case ImageStudio::Serialize::c_nSerializePaintSetPen: SerializedObjectTransformer_ProcessSerializedObject(Paint::Common::SetPen, pTransform, Process_Paint_SetPen, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializePaintSetBrush: SerializedObjectTransformer_ProcessSerializedObject(Paint::Common::SetBrush, pTransform, Process_Paint_SetBrush, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializePaintSetFont: SerializedObjectTransformer_ProcessSerializedObject(Paint::Common::SetFont, pTransform, Process_Paint_SetFont, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializePaintSetFormat: SerializedObjectTransformer_ProcessSerializedObject(Paint::Common::SetFormat, pTransform, Process_Paint_SetFormat, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializePaintDrawLine: SerializedObjectTransformer_ProcessSerializedObject(Paint::Common::DrawLine, pTransform, Process_Paint_DrawLine, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializePaintDrawRectangle: SerializedObjectTransformer_ProcessSerializedObject(Paint::Common::DrawRectangle, pTransform, Process_Paint_DrawRectangle, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializePaintDrawEllipse: SerializedObjectTransformer_ProcessSerializedObject(Paint::Common::DrawEllipse, pTransform, Process_Paint_DrawEllipse, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializePaintDrawInvRectangle: SerializedObjectTransformer_ProcessSerializedObject(Paint::Common::DrawInvRectangle, pTransform, Process_Paint_DrawInvRectangle, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializePaintDrawInvEllipse: SerializedObjectTransformer_ProcessSerializedObject(Paint::Common::DrawInvEllipse, pTransform, Process_Paint_DrawInvEllipse, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializePaintDrawPie: SerializedObjectTransformer_ProcessSerializedObject(Paint::Common::DrawPie, pTransform, Process_Paint_DrawPie, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializePaintDrawSector: SerializedObjectTransformer_ProcessSerializedObject(Paint::Common::DrawSector, pTransform, Process_Paint_DrawSector, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializePaintDrawSimplePie: SerializedObjectTransformer_ProcessSerializedObject(Paint::Common::DrawSimplePie, pTransform, Process_Paint_DrawSimplePie, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializePaintDrawSimpleSector: SerializedObjectTransformer_ProcessSerializedObject(Paint::Common::DrawSimpleSector, pTransform, Process_Paint_DrawSimpleSector, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializePaintDrawPolyline: SerializedObjectTransformer_ProcessSerializedObject(Paint::Common::DrawPolyline, pTransform, Process_Paint_DrawPolyline, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializePaintDrawPolygon: SerializedObjectTransformer_ProcessSerializedObject(Paint::Common::DrawPolygon, pTransform, Process_Paint_DrawPolygon, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializePaintDrawBorder: SerializedObjectTransformer_ProcessSerializedObject(Paint::Common::DrawBorder, pTransform, Process_Paint_DrawBorder, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializePaintDrawMovObject: SerializedObjectTransformer_ProcessSerializedObject(Paint::Common::DrawMovObject, pTransform, Process_Paint_DrawMovObject, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializePaintDrawCredits: SerializedObjectTransformer_ProcessSerializedObject(Paint::Common::DrawCredits, pTransform, Process_Paint_DrawCredits, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializePaintDrawTextSimple: SerializedObjectTransformer_ProcessSerializedObject(Paint::Common::DrawTextSimple, pTransform, Process_Paint_DrawTextSimple, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializePaintDrawTextInRect: SerializedObjectTransformer_ProcessSerializedObject(Paint::Common::DrawTextInRect, pTransform, Process_Paint_DrawTextInRect, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializePaintDrawImageFromFile: SerializedObjectTransformer_ProcessSerializedObject(Paint::Common::DrawImageFromFile, pTransform, Process_Paint_DrawImageFromFile, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializePaintDrawImageFromFileEx: SerializedObjectTransformer_ProcessSerializedObject(Paint::Common::DrawImageFromFileEx, pTransform, Process_Paint_DrawImageFromFileEx, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializePaintDrawImageFromBuffer: SerializedObjectTransformer_ProcessSerializedObject(Paint::Common::DrawImageFromBuffer, pTransform, Process_Paint_DrawImageFromBuffer, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializePaintDrawTimer: SerializedObjectTransformer_ProcessSerializedObject(Paint::Common::DrawTimer, pTransform, Process_Paint_DrawTimer, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializePaintDrawImageFromStorage: SerializedObjectTransformer_ProcessSerializedObject(Paint::Common::DrawImageFromStorage, pTransform, Process_Paint_DrawImageFromStorage, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializePaintDrawFilm: SerializedObjectTransformer_ProcessSerializedObject(Paint::Common::DrawFilm, pTransform, Process_Paint_DrawFilm, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializePaintDrawPuzzle: SerializedObjectTransformer_ProcessSerializedObject(Paint::Common::DrawPuzzle, pTransform, Process_Paint_DrawPuzzle, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializePaintDrawPath: SerializedObjectTransformer_ProcessSerializedObject(Paint::Common::DrawGraphicPath, pTransform, Process_Paint_DrawPath, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializePaintDrawAutoShape: SerializedObjectTransformer_ProcessSerializedObject(Paint::Common::DrawAutoShape, pTransform, Process_Paint_AutoShape, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializePaintDrawTextEx: SerializedObjectTransformer_ProcessSerializedObject(Paint::Common::DrawTextEx, pTransform, Process_Paint_DrawTextEx, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializePaintDrawCountdown: SerializedObjectTransformer_ProcessSerializedObject(Paint::Common::DrawCountdown, pTransform, Process_Paint_DrawCountdown, bSuccess) break;
|
||
|
||
case ImageStudio::Serialize::c_nSerializePaintTextStaticSetBrush: SerializedObjectTransformer_ProcessSerializedObject(Paint::TextStatic::SetBrush, pTransform, Process_Paint_TextStatic_SetBrush, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializePaintTextStaticSetFont: SerializedObjectTransformer_ProcessSerializedObject(Paint::TextStatic::SetFont, pTransform, Process_Paint_TextStatic_SetFont, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializePaintTextStaticSetFormat: SerializedObjectTransformer_ProcessSerializedObject(Paint::TextStatic::SetFormat, pTransform, Process_Paint_TextStatic_SetFormat, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializePaintTextStaticSetShadow: SerializedObjectTransformer_ProcessSerializedObject(Paint::TextStatic::SetShadow, pTransform, Process_Paint_TextStatic_SetShadow, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializePaintTextStaticSetEdge: SerializedObjectTransformer_ProcessSerializedObject(Paint::TextStatic::SetEdge, pTransform, Process_Paint_TextStatic_SetEdge, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializePaintTextStaticDrawInRect: SerializedObjectTransformer_ProcessSerializedObject(Paint::TextStatic::DrawInRect, pTransform, Process_Paint_TextStatic_DrawInRect, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializePaintTextStaticDrawOnEllipse: SerializedObjectTransformer_ProcessSerializedObject(Paint::TextStatic::DrawOnEllipse, pTransform, Process_Paint_TextStatic_DrawOnEllipse, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializePaintTextStaticDrawOnPolyline:SerializedObjectTransformer_ProcessSerializedObject(Paint::TextStatic::DrawOnPolyline, pTransform, Process_Paint_TextStatic_DrawOnPolyline, bSuccess) break;
|
||
|
||
case ImageStudio::Serialize::c_nSerializePaintTextDynamicSetBrush: SerializedObjectTransformer_ProcessSerializedObject(Paint::TextDynamic::SetBrush, pTransform, Process_Paint_TextDynamic_SetBrush, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializePaintTextDynamicSetFont: SerializedObjectTransformer_ProcessSerializedObject(Paint::TextDynamic::SetFont, pTransform, Process_Paint_TextDynamic_SetFont, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializePaintTextDynamicSetShadow: SerializedObjectTransformer_ProcessSerializedObject(Paint::TextDynamic::SetShadow, pTransform, Process_Paint_TextDynamic_SetShadow, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializePaintTextDynamicSetEdge: SerializedObjectTransformer_ProcessSerializedObject(Paint::TextDynamic::SetEdge, pTransform, Process_Paint_TextDynamic_SetEdge, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializePaintTextDynamicStart: SerializedObjectTransformer_ProcessSerializedObject(Paint::TextDynamic::Start, pTransform, Process_Paint_TextDynamic_Start, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializePaintTextDynamicStop: SerializedObjectTransformer_ProcessSerializedObject(Paint::TextDynamic::Stop, pTransform, Process_Paint_TextDynamic_Stop, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializePaintTextDynamicRender: SerializedObjectTransformer_ProcessSerializedObject(Paint::TextDynamic::Render, pTransform, Process_Paint_TextDynamic_Render, bSuccess) break;
|
||
|
||
case ImageStudio::Serialize::c_nSerializeComposeRender: SerializedObjectTransformer_ProcessSerializedObject(Compose::Render, pTransform, Process_Compose_Render, bSuccess) break;
|
||
|
||
case ImageStudio::Serialize::c_nSerializePaintAnimatedText: SerializedObjectTransformer_ProcessSerializedObject(Paint::Text::AnimatedText, pTransform, Process_Paint_Text_AnimatedText, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializeEffectWritingText: SerializedObjectTransformer_ProcessSerializedObject(Paint::Text::EffectWritingText, pTransform, Process_Paint_Text_WritingText, bSuccess) break;
|
||
|
||
case ImageStudio::Serialize::c_nSerializePaintDrawImageFromFileAnimate: SerializedObjectTransformer_ProcessSerializedObject(Paint::Animations::DrawImageFromFileAnimate, pTransform, Process_Paint_DrawImageFromFileAnimate, bSuccess) break;
|
||
case ImageStudio::Serialize::c_nSerializePaintDrawPathAnimate: SerializedObjectTransformer_ProcessSerializedObject(Paint::Animations::DrawGraphicPathAnimate, pTransform, Process_Paint_DrawPathAnimate, bSuccess) break;
|
||
|
||
default:
|
||
return FALSE;
|
||
}
|
||
|
||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> interface buffer, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
// <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>... <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
// <20><><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>, <20><><EFBFBD> <20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> interface source
|
||
// <20> <20><> <20> result, <20>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD> SetPen) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...
|
||
|
||
return bSuccess;
|
||
}
|
||
|
||
virtual BOOL OnProgress(double dPercents)
|
||
{
|
||
if (!m_pEventReceiver)
|
||
return TRUE;
|
||
|
||
return m_pEventReceiver->OnProgress(dPercents);
|
||
}
|
||
|
||
|
||
BOOL CheckRaw()
|
||
{
|
||
|
||
return FALSE;
|
||
}
|
||
|
||
BOOL SaveAsGdiplus( int nSrcId, CString path, int type, const Gdiplus::EncoderParameters* pEncoderSettings = NULL, int dpi = 0,CString sMetaData=_T("") )
|
||
{
|
||
if( m_oSources.IsBadIndex( nSrcId ) )
|
||
return FALSE;
|
||
|
||
if( path.GetLength() <= 0 )
|
||
return TRUE;
|
||
|
||
CLSID* pClsid = m_oImageCLSID.GetCLSID( type );
|
||
if( !pClsid )
|
||
return FALSE;
|
||
|
||
IMediaFrame* pFrame = ResizeAspectFrame( m_oSources.Get( nSrcId ) );
|
||
if( !pFrame )
|
||
return FALSE;
|
||
|
||
////////////////////////////////////////////////////////////////////////////
|
||
//meta-data
|
||
CMetaDataSaver oMetaDataSaver;
|
||
oMetaDataSaver.SetXML(sMetaData);
|
||
////////////////////////////////////////////////////////////////////////////
|
||
|
||
BYTE* pBGRA = NULL;
|
||
int nWidth = 0;
|
||
int nHeight = 0;
|
||
int nStride = 0;
|
||
BOOL bSuccess = FALSE;
|
||
BOOL bSuccessMetaData = FALSE;
|
||
|
||
if( Core::c_nErrorNone == Core::COM::COM_GetBGRAImageFromInterface( pFrame, pBGRA, nWidth, nHeight, &nStride ) )
|
||
{
|
||
if( nStride < 0 )
|
||
{
|
||
pBGRA -= (nHeight - 1) * nStride;
|
||
}
|
||
|
||
Gdiplus::Bitmap oImage( nWidth, nHeight, nStride, PixelFormat32bppARGB, pBGRA );
|
||
if( Gdiplus::Ok == oImage.GetLastStatus() )
|
||
{
|
||
if( dpi != 0 )
|
||
{
|
||
oImage.SetResolution( (float)dpi, (float)dpi );
|
||
}
|
||
bSuccessMetaData =oMetaDataSaver.SaveToBitmap(&oImage);
|
||
|
||
if( Gdiplus::Ok == oImage.Save( CStringW( path ), pClsid, pEncoderSettings ) )
|
||
{
|
||
bSuccess = TRUE;
|
||
|
||
}
|
||
}
|
||
}
|
||
|
||
pFrame->Release();
|
||
|
||
return bSuccess;
|
||
}
|
||
|
||
|
||
BOOL SaveResultFromVideoCard()
|
||
{
|
||
if( m_nLastSourceInVideoCard < 0 )
|
||
return TRUE;
|
||
|
||
IDirect3DTexture9* pTexture = m_oRender.TargetToTexture();
|
||
if( !pTexture )
|
||
{
|
||
m_nLastSourceInVideoCard = -1;
|
||
return FALSE;
|
||
}
|
||
|
||
HRESULT hr;
|
||
BOOL bRetCode = m_oSources.SetTexture( m_nLastSourceInVideoCard, pTexture, hr );
|
||
|
||
pTexture->Release();
|
||
m_nLastSourceInVideoCard = -1;
|
||
|
||
if( !bRetCode )
|
||
{
|
||
m_oRender.CheckError( hr );
|
||
return FALSE;
|
||
}
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
int UpdateVideoEffect( dx9::IEffect* pEffect, int nSrcId, double dCompleteness, BOOL bLocalUseVideoCard )
|
||
{
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
if( m_nLastSourceInVideoCard != nSrcId )
|
||
{
|
||
if( !SaveResultFromVideoCard() )
|
||
return -1; // <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
}
|
||
|
||
IDirect3DTexture9* pTexture = NULL;
|
||
|
||
do
|
||
{
|
||
if( !(m_bUseVideoCard && bLocalUseVideoCard) )
|
||
break;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
if( m_nLastSourceInVideoCard < 0 &&
|
||
m_oSources.GetCountPixels( nSrcId ) < c_nMinImageSizeForDirectX )
|
||
{
|
||
break;
|
||
}
|
||
|
||
IDirect3DDevice9* pDevice = m_oRender.IsValid();
|
||
if( !pDevice )
|
||
break;
|
||
|
||
int nRetCode = pEffect->Prepare( m_oRender, dCompleteness );
|
||
if( nRetCode > 0 )
|
||
return 1;
|
||
|
||
if( nRetCode < 0 )
|
||
break;
|
||
|
||
if( m_nLastSourceInVideoCard < 0 )
|
||
{
|
||
HRESULT hr = D3D_OK;
|
||
pTexture = m_oSources.GetTexture( nSrcId, pDevice, hr );
|
||
//m_oRender.SetRenderTargetTexture( pTexture );
|
||
m_oRender.CheckError( hr );
|
||
}
|
||
else
|
||
{
|
||
pTexture = m_oRender.GetRenderTargetTexture();
|
||
}
|
||
|
||
}while(0);
|
||
|
||
if( pTexture )
|
||
{
|
||
BOOL bRetCode = pEffect->Apply( m_oRender, pTexture );
|
||
pTexture->Release();
|
||
if( bRetCode )
|
||
{
|
||
m_nLastSourceInVideoCard = nSrcId;
|
||
return 1;
|
||
}
|
||
}
|
||
|
||
if( !SaveResultFromVideoCard() )
|
||
return -1; // <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
|
||
return 0;
|
||
}
|
||
|
||
public:
|
||
|
||
SerializedObjectTransformer()
|
||
{
|
||
m_pEventReceiver = NULL;
|
||
|
||
m_dTime = 0;
|
||
|
||
m_pMemoryStorage = NULL;
|
||
|
||
|
||
m_pFileCache = NULL;
|
||
|
||
m_bUseVideoCard = 2;
|
||
|
||
m_nLastSourceInVideoCard = -1;
|
||
|
||
m_nSVGWidth = -1;
|
||
m_nSVGHeight = -1;
|
||
}
|
||
~SerializedObjectTransformer()
|
||
{
|
||
Destroy();
|
||
|
||
RELEASEINTERFACE(m_pMemoryStorage);
|
||
|
||
|
||
RELEASEINTERFACE(m_pFileCache);
|
||
}
|
||
void Destroy()
|
||
{
|
||
//ClearSources();
|
||
|
||
m_oImageCache.RemoveAll();
|
||
}
|
||
|
||
BOOL SetMediaData(int nIndex, IUnknown* pSource)
|
||
{
|
||
return m_oSources.SetSource( abs(nIndex), pSource, FALSE, (nIndex >= 0) );
|
||
}
|
||
IUnknown* GetMediaData(int nIndex)
|
||
{
|
||
return m_oSources.GetResultFrame( nIndex );
|
||
}
|
||
|
||
void SetTime(double dTime)
|
||
{
|
||
m_dTime = dTime;
|
||
}
|
||
void SetEventReceiver(SerializedObjectTransformerEvents* pEventReceiver)
|
||
{
|
||
m_pEventReceiver = pEventReceiver;
|
||
}
|
||
void SetMemoryStorage( IMemoryStorage* pMemoryStorage )
|
||
{
|
||
RELEASEINTERFACE(m_pMemoryStorage);
|
||
|
||
if( pMemoryStorage )
|
||
{
|
||
pMemoryStorage->AddRef();
|
||
m_pMemoryStorage = pMemoryStorage;
|
||
}
|
||
}
|
||
void SetFileCache( FileCache::IAVSImageFilesCache* pCache )
|
||
{
|
||
RELEASEINTERFACE(m_pFileCache);
|
||
|
||
/*
|
||
if( pCache )
|
||
{
|
||
pCache->AddRef();
|
||
m_pFileCache = pCache;
|
||
}
|
||
*/
|
||
|
||
}
|
||
void ResizeSourceBuffer( int size )
|
||
{
|
||
m_oSources.Resize( size );
|
||
}
|
||
|
||
BOOL Process(ImageStudio::Serialize::SerializedObjectList& oTransforms)
|
||
{
|
||
// <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
// <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> IN(1) -> IN(2)
|
||
// <20> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>, <20><><EFBFBD>
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
|
||
int nLastSafePoint = -1;
|
||
m_nLastSourceInVideoCard = -1;
|
||
|
||
ImageStudio::Serialize::SerializedObject oEmptyObject;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
int nTransformCount = oTransforms.GetCount();
|
||
for (int nTransform = 0; nTransform <= nTransformCount; ++nTransform)
|
||
{
|
||
ImageStudio::Serialize::SerializedObject* pTransform = NULL;
|
||
|
||
if( nTransform != nTransformCount )
|
||
pTransform = oTransforms[nTransform];
|
||
else
|
||
pTransform = &oEmptyObject;
|
||
|
||
if( !pTransform->bUseVideoCard )
|
||
{
|
||
if( !SaveResultFromVideoCard() )
|
||
{
|
||
nTransform = nLastSafePoint;
|
||
continue;
|
||
}
|
||
|
||
nLastSafePoint = nTransform;
|
||
}
|
||
|
||
// return code: 0 - error, 1 - ok, -1 - repeat from last safe point
|
||
int nRetCode = OnTransform( pTransform );
|
||
if( nRetCode < 0 )
|
||
{
|
||
nTransform = nLastSafePoint;
|
||
continue;
|
||
}
|
||
|
||
if( m_nLastSourceInVideoCard < 0 )
|
||
nLastSafePoint = nTransform;
|
||
|
||
OnProgress(100.0*(nTransform + 1)/(nTransformCount + 1));
|
||
}
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
ClearCache(oTransforms);
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
m_oImageCache.Clear();
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
static BOOL ResizeMetaFile( IO::CMetaFile* pMetaFile, long nNewWidth, long nNewHeight, long Color, long Type, double dCropZoom, int alpha = 255, int nSrcX = 0, int nSrcY = 0, int nSrcWidth = 0, int nSrcHeight = 0 )
|
||
{
|
||
if( !pMetaFile || nNewWidth <= 0 || nNewHeight <= 0 )
|
||
return FALSE;
|
||
|
||
int nWidth = pMetaFile->GetWidth();
|
||
int nHeight = pMetaFile->GetHeight();
|
||
|
||
if( nWidth <= 0 || nHeight <= 0 )
|
||
return FALSE;
|
||
|
||
if( nSrcWidth <= 0 )
|
||
nSrcWidth = nWidth;
|
||
|
||
if( nSrcHeight <= 0 )
|
||
nSrcHeight = nHeight;
|
||
|
||
if( nSrcX != 0 || nSrcY != 0 || nSrcWidth != nWidth || nSrcHeight != nHeight )
|
||
{
|
||
Gdiplus::Rect oSrcRect( 0, 0, nWidth, nHeight );
|
||
Gdiplus::Rect oDstRect( nSrcX, nSrcY, nSrcWidth, nSrcHeight );
|
||
|
||
if( !oDstRect.Intersect( oSrcRect ) )
|
||
return FALSE;
|
||
|
||
double dScaleX = double(nWidth ) / oDstRect.Width;
|
||
double dScaleY = double(nHeight) / oDstRect.Height;
|
||
double dX = -(oDstRect.X + (oDstRect.Width - 1) * 0.5) * dScaleX + (nWidth - 1) * 0.5;
|
||
double dY = -(oDstRect.Y + (oDstRect.Height - 1) * 0.5) * dScaleY + (nHeight - 1) * 0.5;
|
||
|
||
double m[6] = {dScaleX, 0, 0, dScaleY, dX, dY};
|
||
pMetaFile->SetTransform( m );
|
||
}
|
||
|
||
pMetaFile->SetSize( nNewWidth, nNewHeight );
|
||
|
||
if( Type == c_nResizeStretchNearest || Type == c_nResizeStretchBillinear || Type == c_nResizeStretchBicubic || Type == c_nResizeStretchSuper )
|
||
{
|
||
}
|
||
else
|
||
if( Type == c_nResizeShrinkNearest || Type == c_nResizeShrinkBillinear || Type == c_nResizeShrinkBicubic || Type == c_nResizeShrinkSuper )
|
||
{
|
||
double dScaleX = double(nNewWidth) / nWidth;
|
||
double dScaleY = double(nNewHeight) / nHeight;
|
||
double dScale = min(dScaleX, dScaleY);
|
||
|
||
double dW = dScale * nWidth;
|
||
double dH = dScale * nHeight;
|
||
|
||
dScaleX = dW / nNewWidth;
|
||
dScaleY = dH / nNewHeight;
|
||
|
||
double m[6] = {
|
||
dScaleX,
|
||
0,
|
||
0,
|
||
dScaleY,
|
||
(nNewWidth - 1) / 2 * (1 - dScaleX),
|
||
(nNewHeight - 1) / 2 * (1 - dScaleY)
|
||
};
|
||
|
||
pMetaFile->AddTransform( m );
|
||
}
|
||
else
|
||
if( Type == c_nResizeCropNearest || Type == c_nResizeCropBillinear || Type == c_nResizeCropBicubic || Type == c_nResizeCropSuper )
|
||
{
|
||
double dScaleX = double(nNewWidth) / nWidth;
|
||
double dScaleY = double(nNewHeight) / nHeight;
|
||
|
||
double dMinScale = min(dScaleX, dScaleY);
|
||
double dMaxScale = max(dScaleX, dScaleY);
|
||
double dScale = (dMinScale + (dMaxScale - dMinScale) * dCropZoom);
|
||
|
||
double dW = dScale * nWidth;
|
||
double dH = dScale * nHeight;
|
||
|
||
dScaleX = dW / nNewWidth;
|
||
dScaleY = dH / nNewHeight;
|
||
|
||
double m[6] = {
|
||
dScaleX,
|
||
0,
|
||
0,
|
||
dScaleY,
|
||
(nNewWidth - 1) / 2 * (1 - dScaleX),
|
||
(nNewHeight - 1) / 2 * (1 - dScaleY)
|
||
};
|
||
|
||
pMetaFile->AddTransform( m );
|
||
}
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
long m_nSVGWidth, m_nSVGHeight;
|
||
BOOL LoadSVGFromXML( BSTR sXML )
|
||
{
|
||
ImageStudio::IO::CMetaFile svg;
|
||
if( svg.LoadSVGFromXML( sXML ) )
|
||
{
|
||
svg.SetSize( m_nSVGWidth, m_nSVGHeight );
|
||
|
||
ImageStudio::IO::CMetaFile* pSVG = new ImageStudio::IO::CMetaFile( svg );
|
||
if( pSVG )
|
||
{
|
||
if( m_oSources.SetMetafile( 0, pSVG ) )
|
||
return TRUE;
|
||
|
||
delete pSVG;
|
||
}
|
||
}
|
||
|
||
return FALSE;
|
||
|
||
}
|
||
};
|
||
|
||
}
|
||
}
|