Richard Parker / EALCD
Committer:
richardparker
Date:
Thu May 06 23:32:14 2010 +0000
Revision:
6:4fe6f365cbeb
Parent:
1:f04bcaea1d60
Added caching for the fonts which seems to give ~20x improvement in rendering at the sacrifice of RAM.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
richardparker 0:839ecbf5cb2a 1 // Copyright 2010 Richard Parker
richardparker 0:839ecbf5cb2a 2
richardparker 0:839ecbf5cb2a 3 #ifndef MBED_EAIMAGE_H
richardparker 0:839ecbf5cb2a 4 #define MBED_EAIMAGE_H
richardparker 0:839ecbf5cb2a 5
richardparker 0:839ecbf5cb2a 6 #include "mbed.h"
richardparker 0:839ecbf5cb2a 7
richardparker 0:839ecbf5cb2a 8 #include "EAWidget.h"
richardparker 0:839ecbf5cb2a 9
richardparker 0:839ecbf5cb2a 10 class EALCD;
richardparker 1:f04bcaea1d60 11 class EAColor;
richardparker 0:839ecbf5cb2a 12
richardparker 0:839ecbf5cb2a 13 /**
richardparker 0:839ecbf5cb2a 14 * Class to handle loading and displaying an image.
richardparker 0:839ecbf5cb2a 15 * @author Richard Parker
richardparker 0:839ecbf5cb2a 16 */
richardparker 0:839ecbf5cb2a 17 class EAImage: public EAWidget
richardparker 0:839ecbf5cb2a 18 {
richardparker 0:839ecbf5cb2a 19 public:
richardparker 0:839ecbf5cb2a 20 struct EABMPHeader {
richardparker 0:839ecbf5cb2a 21 unsigned int headerSize;
richardparker 0:839ecbf5cb2a 22 unsigned int width;
richardparker 0:839ecbf5cb2a 23 unsigned int height;
richardparker 0:839ecbf5cb2a 24 unsigned short noColorPlanes;
richardparker 0:839ecbf5cb2a 25 unsigned short bitsPerPixel;
richardparker 0:839ecbf5cb2a 26 unsigned int compressionType;
richardparker 0:839ecbf5cb2a 27 unsigned int bmpSize;
richardparker 0:839ecbf5cb2a 28 unsigned int horizontalRes;
richardparker 0:839ecbf5cb2a 29 unsigned int verticalRes;
richardparker 0:839ecbf5cb2a 30 unsigned int noColors;
richardparker 0:839ecbf5cb2a 31 unsigned int noImportantColors;
richardparker 0:839ecbf5cb2a 32 };
richardparker 1:f04bcaea1d60 33
richardparker 1:f04bcaea1d60 34 EAImage();
richardparker 1:f04bcaea1d60 35 ~EAImage();
richardparker 1:f04bcaea1d60 36
richardparker 1:f04bcaea1d60 37 bool load(const char* path);
richardparker 1:f04bcaea1d60 38 void unload();
richardparker 1:f04bcaea1d60 39
richardparker 1:f04bcaea1d60 40 inline const char* path() const { return _path; }
richardparker 1:f04bcaea1d60 41
richardparker 1:f04bcaea1d60 42 inline bool isValid() const { return (_path != NULL); }
richardparker 1:f04bcaea1d60 43
richardparker 1:f04bcaea1d60 44 virtual void paint(EALCD& lcd);
richardparker 1:f04bcaea1d60 45 virtual void paint(EALCD& lcd, unsigned int x, unsigned int y, unsigned int w, unsigned int h);
richardparker 1:f04bcaea1d60 46
richardparker 1:f04bcaea1d60 47 inline const EABMPHeader& info() { return _header; }
richardparker 1:f04bcaea1d60 48
richardparker 1:f04bcaea1d60 49 inline bool isMask() { return _mask; }
richardparker 1:f04bcaea1d60 50 inline void setMask(bool value) { _mask = value; }
richardparker 1:f04bcaea1d60 51
richardparker 6:4fe6f365cbeb 52 inline bool isCached() { return _cached; }
richardparker 6:4fe6f365cbeb 53 inline void setCached(bool value) { _cached = value; }
richardparker 6:4fe6f365cbeb 54
richardparker 1:f04bcaea1d60 55 private:
richardparker 0:839ecbf5cb2a 56 char* _path;
richardparker 1:f04bcaea1d60 57 EAColor* _palette;
richardparker 0:839ecbf5cb2a 58 unsigned int _dataOffset;
richardparker 1:f04bcaea1d60 59 EABMPHeader _header;
richardparker 1:f04bcaea1d60 60 bool _mask;
richardparker 6:4fe6f365cbeb 61 bool _cached;
richardparker 6:4fe6f365cbeb 62 char* _cache;
richardparker 6:4fe6f365cbeb 63 long int _size;
richardparker 6:4fe6f365cbeb 64 long int _pos;
richardparker 0:839ecbf5cb2a 65
richardparker 0:839ecbf5cb2a 66 bool _loadHeader(const char* path);
richardparker 6:4fe6f365cbeb 67 bool _loadCache(FILE* fp);
richardparker 1:f04bcaea1d60 68 bool _loadPalette(FILE* fp);
richardparker 1:f04bcaea1d60 69
richardparker 1:f04bcaea1d60 70 int _wordsInRow();
richardparker 1:f04bcaea1d60 71 int _wordForX(unsigned int x);
richardparker 1:f04bcaea1d60 72 int _xWordOffset(unsigned int x);
richardparker 1:f04bcaea1d60 73 unsigned short _getColourAtOffset(unsigned int word, int offset);
richardparker 0:839ecbf5cb2a 74
richardparker 6:4fe6f365cbeb 75 int _fseek(FILE* stream, long int offset, int origin);
richardparker 6:4fe6f365cbeb 76 size_t _fread(void* ptr, size_t size, size_t count, FILE* stream);
richardparker 6:4fe6f365cbeb 77 int _feof(FILE* stream);
richardparker 0:839ecbf5cb2a 78 };
richardparker 0:839ecbf5cb2a 79
richardparker 0:839ecbf5cb2a 80 #endif