My old topic: How to display image (image's path is inputted by user)
I have solved my problem with wizard_hu's help. And I saw this article doesn't have example usage. I searched in google. I found that there are someones got someproblems with this article and didn't solve them. So I want to show them a way to use this article.
How to read images to Symbian bitmap
ImageConverter.h
ImageConverter.cppCode:#ifndef __IMAGECONVERT_h__ #define __IMAGECONVERT_h__ #include <e32base.h> #include <coecntrl.h> #include <w32std.h> #include <e32std.h> #include <ImageConversion.h> class CFbsBitmap; class CBitmapScaler; class MImageConverterObserver { public: virtual void ConversionComplete(TInt aError) = 0; }; class CImageConverter : public CActive { public: CImageConverter(MImageConverterObserver* aObserver); void ConstructL(const TDesC& aFileName); ~CImageConverter(); public: CFbsBitmap* Bitmap(); protected: void DoCancel(); void RunL(); private: MImageConverterObserver* iObserver; CImageDecoder* iImageDecoder; CFbsBitmap* iImage; TFileName iImageName; }; #endif // __IMAGECONVERT_h__
Example usage:Code:#include <eikenv.h> #include <BitmapTransforms.h> #include "imageconverter.h" CImageConverter::CImageConverter(MImageConverterObserver* aObserver) :CActive(0) { iObserver = aObserver; CActiveScheduler::Add(this); } CImageConverter::~CImageConverter() { Cancel(); //delete iImage; delete iImageDecoder; } void CImageConverter::ConstructL(const TDesC& aFileName) { iImageName.Copy(aFileName); if(iImageName.Length()) { if(iImageDecoder) { delete iImageDecoder; iImageDecoder = 0; } iImageDecoder = CImageDecoder::FileNewL(CCoeEnv::Static()->FsSession(),aFileName); delete iImage; iImage = NULL; iImage = new(ELeave)CFbsBitmap(); iImage->Create(iImageDecoder->FrameInfo(0).iOverallSizeInPixels,iImageDecoder->FrameInfo(0).iFrameDisplayMode); iImageDecoder->Convert(&iStatus,*iImage,0); SetActive(); } } void CImageConverter::DoCancel() { iImageDecoder->Cancel(); } //Transfering ownership of image, so calling function must delete it. CFbsBitmap* CImageConverter::Bitmap() { return iImage; } void CImageConverter::RunL() { if(iStatus == KErrNone) { iObserver->ConversionComplete(iStatus.Int()); } else { delete iImage; iImage = 0; } }
Note: You must add fbscli.lib and imageconversion.lib to your MMP file.Code://Edit View.h or Container.h: #include "ImageConverter.h" // CLASS DECLARATION class CImageReaderAppView : public CCoeControl, MImageConverterObserver //Add more function to class: public: //MImageConverterObserver void ConversionComplete(TInt aError); //Add more data to class: private://data CFbsBitmap* iBitmap; CImageConverter* iImageConverter; //Edit ContructL in View.cpp or Container.cpp: void CImageReaderAppView::ConstructL(const TRect& aRect) { // Create a window for this application view CreateWindowL(); // Set the windows size SetRect(aRect); //Convert Image to Bitmap iImageConverter = new (ELeave) CImageConverter(this); iImageConverter->ConstructL(_L("\\Data\\Images\\lokki2.jpg")); // Activate the window, which makes it ready to be drawn ActivateL(); } //Draw picture: if(iBitmap) { gc.BitBlt(TPoint(0,0), iBitmap); }




