Dear experts,
Im not able to rub my application it gives me errors to read exif from picture/img
.cppCode:class CFbsBitmap; class CExifRead; class CImageDecoder; /** * CExif_reader * */ class CExif_reader : public CBase { public: // Constructors and destructor /** * Destructor. */ ~CExif_reader(); /** * Two-phased constructor. */ static CExif_reader* NewL(); /** * Two-phased constructor. */ static CExif_reader* NewLC(); void read_exf(TDesC16 & filename); private: /** * Constructor for performing 1st stage construction */ CExif_reader(); /** * EPOC default constructor for performing 2nd stage construction */ void ConstructL(); private: TFileName iFile; RFs rFile; HBufC8 * iImageMake; // to get the make of the image HBufC8 * iImageModel; // to get the model of the image HBufC8 * iImageDate; //to get the date of the image CExifRead* read; CFbsBitmap * bitmap; const HBufC16* path; CImageDecoder* readFile; }; #endif // EXIF_READER_H
ConsoleCode:/* ============================================================================ Name : Exif_reader.cpp Author : Mohamed Khalel Version : 1.0 Copyright : This application has been developed by Mohamed Khalel Description : CExif_reader implementation ============================================================================ */ #include "Exif_reader.h" #include <exifread.h> #include <exifmodify.h> #include <f32file.h> #include <eikenv.h> #include <fbs.h> #include <ImageConversion.h> CExif_reader::CExif_reader() { // No implementation required } CExif_reader::~CExif_reader() { } CExif_reader* CExif_reader::NewLC() { CExif_reader* self = new (ELeave) CExif_reader(); CleanupStack::PushL(self); self->ConstructL(); return self; } CExif_reader* CExif_reader::NewL() { CExif_reader* self = CExif_reader::NewLC(); CleanupStack::Pop(); // self; return self; } void CExif_reader::ConstructL() { } void CExif_reader::read_exf(TDesC16 &filename) { RFile file; User::LeaveIfError(file.Open(CEikonEnv::Static()->FsSession(),filename,EFileRead)); CleanupClosePushL(file); TInt size = 0; file.Size(size); HBufC8* exif_info = HBufC8::NewL(size); CleanupStack::PushL(exif_info); TPtr8 buffer = exif_info->Des(); User::LeaveIfError(file.Read(buffer)); CleanupStack::Pop(exif_info); CleanupStack::PopAndDestroy(); CleanupStack::PushL(exif_info); CExifRead * exif_reader = CExifRead::NewL(exif_info->Des()); CleanupStack::PushL(exif_reader); TInt err = KErrNone ; TRAP (err,iImageMake = exif_reader->GetMakeL()) TRAP (err,iImageModel = exif_reader->GetModelL()); TRAP (err,iImageDate = exif_reader->GetDateTimeOriginalL()); CleanupStack::PopAndDestroy(exif_reader); CleanupStack::PopAndDestroy(exif_info); }
Code:/* ============================================================================ Name : Exif_consol.cpp Author : Mohamed Khalel Copyright : This application has been developed by Mohamed Khalel Description : Exe source file ============================================================================ */ // Include Files #include "Exif_consol.h" #include <e32base.h> #include <e32std.h> #include <e32cons.h> // Console #include "Exif_reader.h" // Constants _LIT(KTextConsoleTitle, "Console"); _LIT(KTextFailed, " failed, leave code = %d"); _LIT(KTextPressAnyKey, " [press any key]\n"); // Global Variables LOCAL_D CConsoleBase* console; // write all messages to this // Local Functions LOCAL_C void MainL() { // // add your program code here, example code below // console->Write(_L("Hello, world!\n")); _LIT( path1,"C://img.jpg"); TDesC16 path_file = path1.operator const TDesC16 &(); CExif_reader * read = CExif_reader::NewL(); read->read_exf(path_file); } LOCAL_C void DoStartL() { // Create active scheduler (to run active objects) CActiveScheduler* scheduler = new (ELeave) CActiveScheduler(); CleanupStack::PushL(scheduler); CActiveScheduler::Install(scheduler); MainL(); // Delete active scheduler CleanupStack::PopAndDestroy(scheduler); } // Global Functions GLDEF_C TInt E32Main() { // Create cleanup stack __UHEAP_MARK; CTrapCleanup* cleanup = CTrapCleanup::New(); // Create output console TRAPD(createError, console = Console::NewL(KTextConsoleTitle, TSize( KConsFullScreen, KConsFullScreen))); if (createError) { delete cleanup; return createError; } // Run application code inside TRAP harness, wait keypress when terminated TRAPD(mainError, DoStartL()); if (mainError) console->Printf(KTextFailed, mainError); console->Printf(KTextPressAnyKey); console->Getch(); delete console; delete cleanup; __UHEAP_MARKEND; return KErrNone; }

Reply With Quote


