diff -r 000000000000 -r 40261b775718 imagingandcamerafws/imagingfws/GifScaler/src/GifScaler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/imagingandcamerafws/imagingfws/GifScaler/src/GifScaler.cpp Tue Feb 02 01:56:55 2010 +0200 @@ -0,0 +1,184 @@ +// Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +#include "gifscaler.h" +#include "GifScalerMain.h" +#include "GifScalerBody.h" + +/** +The function NewL constructs a CGifScaler. +This version constructs a scaler for scaling and color quantizing only. +No mask data is required in this case) + +@param aSource + The bitmap to be re-scaled. +@param aOptions + Scaling and color quantization options. + +@leave KErrArgument if the source bitmap or the options are invalid. +@panic ENoSourceBitmap if the source bitmap has not been created. + +@return A pointer to a fully constructed CGifScaler +*/ + +EXPORT_C CGifScaler* CGifScaler::NewL(CFbsBitmap& aSource, TOptions aOptions) + { + CGifScaler* self = new(ELeave) CGifScaler(); + CleanupStack::PushL(self); + self->ConstructL(aSource, NULL, aOptions); + + CleanupStack::Pop(self); + return self; + } + +/** +The function NewL constructs a CGifScaler. +This version constructs a scaler for scaling and color quantizing an image with transparency. + +@param aSource + The bitmap to be re-scaled. +@param aSourceMask + The mask bitmap that provides the transparency data. +@param aOptions + Scaling and color quantization options. + +@leave KErrArgument if the source bitmap, source mask bitmap, or the options are invalid. +@panic ENoSourceBitmap if the source bitmap has not been created. +@panic ENoSourceMaskBitmap if the source mask bitmap has not been created. + +@return A pointer to a fully constructed CGifScaler +*/ + +EXPORT_C CGifScaler* CGifScaler::NewL(CFbsBitmap& aSource, CFbsBitmap& aSourceMask, TOptions aOptions) + { + CGifScaler* self = new(ELeave) CGifScaler(); + CleanupStack::PushL(self); + self->ConstructL(aSource, &aSourceMask, aOptions); + + CleanupStack::Pop(self); + return self; + } + + +/* +Constructor for this class. + +@internalTechnology +*/ + +CGifScaler::CGifScaler() + { + } + + +/** +ConstructL +Performs second phase of contruction + +@internalTechnology +*/ + +void CGifScaler::ConstructL(CFbsBitmap& aSource, CFbsBitmap* aSourceMask, TOptions aOptions) + { + iBody = CBody::NewL(aSource, aSourceMask, aOptions); + } + + +/** +This is the destructor for the CGifScaler +and is responsible for deallocating all resources +allocated by the CGifScaler. +*/ + +EXPORT_C CGifScaler::~CGifScaler() + { + Cancel(); + delete iBody; + } + +/** +Scale the source bitmap and mask to produce a single 8bpp bitmap and an output palette. +If a mask was supplied during construction the last index in the palette will be used for transparency. + +The scaling factor is based on the relative sizes of the source +and target bitmaps. The operation is asynchronous. When it is +complete, successfully or otherwise, the TRequestStatus +aStatus is set, passing the state of the operation. + +@param aStatus + Request status to signal when scaling is complete. +@param aDestination + The destination bitmap. (EColor256) +@param aPalette + The output palette. +@param aMaintainAspectRatio + ETrue - the aspect ratio is retained; + this is the default. The same scaling factor is + applied in both the horizontal and vertical + directions. This is the smaller of the horizontal + scaling factor and the vertical scaling factor. + EFalse - the aspect ratio need not be + retained. +*/ + +EXPORT_C void CGifScaler::Scale(TRequestStatus* aStatus, CFbsBitmap& aDestination, CPalette& aPalette, TBool aMaintainAspectRatio) + { + ASSERT(iBody); + iBody->Scale(aStatus, aDestination, aPalette, aMaintainAspectRatio); + } + +/** +Scale the source bitmap and mask to produce a single 8bpp bitmap and an output palette, +specifying a transparency level to be used when determining whether destination pixels are transparent. +If a mask was supplied during construction the last index in the palette will be used for transparency. + +The scaling factor is based on the relative sizes of the source +and target bitmaps. The operation is asynchronous. When it is +complete, successfully or otherwise, the TRequestStatus +aStatus is set, passing the state of the operation. + +@param aStatus + Request status to signal when scaling is complete. +@param aDestination + The destination bitmap. (EColor256) +@param aPalette + The output palette. +@param aTransparencyThreshold + The transparency level used to determine if destination pixels are transparent. +@param aMaintainAspectRatio + ETrue - the aspect ratio is retained; + this is the default. The same scaling factor is + applied in both the horizontal and vertical + directions. This is the smaller of the horizontal + scaling factor and the vertical scaling factor. + EFalse - the aspect ratio need not be + retained. +*/ + +EXPORT_C void CGifScaler::ThresholdScale(TRequestStatus* aStatus, CFbsBitmap& aDestination, CPalette& aPalette, TUint8 aTransparencyThreshold, TBool aMaintainAspectRatio) + { + ASSERT(iBody); + iBody->Scale(aStatus, aDestination, aPalette, aTransparencyThreshold, aMaintainAspectRatio); + } + +/** +Cancel any outstanding activity. +*/ + +EXPORT_C void CGifScaler::Cancel() + { + if (iBody) + iBody->Cancel(); + }