Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
widgets/EAImage.h@6:4fe6f365cbeb, 2010-05-06 (annotated)
- 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?
| User | Revision | Line number | New 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 |