OLD | NEW |
| (Empty) |
1 | |
2 /* | |
3 * Copyright 2007 The Android Open Source Project | |
4 * | |
5 * Use of this source code is governed by a BSD-style license that can be | |
6 * found in the LICENSE file. | |
7 */ | |
8 | |
9 | |
10 #ifndef IMAGE_CODEC_BMPDECODERHELPER_H__ | |
11 #define IMAGE_CODEC_BMPDECODERHELPER_H__ | |
12 | |
13 /////////////////////////////////////////////////////////////////////////////// | |
14 // this section is my current "glue" between google3 code and android. | |
15 // will be fixed soon | |
16 | |
17 #include "SkTypes.h" | |
18 #include <limits.h> | |
19 #define DISALLOW_EVIL_CONSTRUCTORS(name) | |
20 #define CHECK(predicate) SkASSERT(predicate) | |
21 typedef uint8_t uint8; | |
22 typedef uint32_t uint32; | |
23 | |
24 template <typename T> class scoped_array { | |
25 private: | |
26 T* ptr_; | |
27 scoped_array(scoped_array const&); | |
28 scoped_array& operator=(const scoped_array&); | |
29 | |
30 public: | |
31 explicit scoped_array(T* p = 0) : ptr_(p) {} | |
32 ~scoped_array() { | |
33 delete[] ptr_; | |
34 } | |
35 | |
36 void reset(T* p = 0) { | |
37 if (p != ptr_) { | |
38 delete[] ptr_; | |
39 ptr_ = p; | |
40 } | |
41 } | |
42 | |
43 T& operator[](int i) const { | |
44 return ptr_[i]; | |
45 } | |
46 }; | |
47 | |
48 /////////////////////////////////////////////////////////////////////////////// | |
49 | |
50 namespace image_codec { | |
51 | |
52 class BmpDecoderCallback { | |
53 public: | |
54 BmpDecoderCallback() { } | |
55 virtual ~BmpDecoderCallback() {} | |
56 | |
57 /** | |
58 * This is called once for an image. It is passed the width and height and | |
59 * should return the address of a buffer that is large enough to store | |
60 * all of the resulting pixels (widht * height * 3 bytes). If it returns nullp
tr, | |
61 * then the decoder will abort, but return true, as the caller has received | |
62 * valid dimensions. | |
63 */ | |
64 virtual uint8* SetSize(int width, int height) = 0; | |
65 | |
66 private: | |
67 DISALLOW_EVIL_CONSTRUCTORS(BmpDecoderCallback); | |
68 }; | |
69 | |
70 class BmpDecoderHelper { | |
71 public: | |
72 BmpDecoderHelper() { } | |
73 ~BmpDecoderHelper() { } | |
74 bool DecodeImage(const char* data, | |
75 size_t len, | |
76 int max_pixels, | |
77 BmpDecoderCallback* callback); | |
78 | |
79 private: | |
80 DISALLOW_EVIL_CONSTRUCTORS(BmpDecoderHelper); | |
81 | |
82 void DoRLEDecode(); | |
83 void DoStandardDecode(); | |
84 void PutPixel(int x, int y, uint8 col); | |
85 | |
86 int GetInt(); | |
87 int GetShort(); | |
88 uint8 GetByte(); | |
89 int CalcShiftRight(uint32 mask); | |
90 int CalcShiftLeft(uint32 mask); | |
91 | |
92 const uint8* data_; | |
93 size_t pos_; | |
94 size_t len_; | |
95 int width_; | |
96 int height_; | |
97 int bpp_; | |
98 int pixelPad_; | |
99 int rowPad_; | |
100 scoped_array<uint8> colTab_; | |
101 uint32 redBits_; | |
102 uint32 greenBits_; | |
103 uint32 blueBits_; | |
104 int redShiftRight_; | |
105 int greenShiftRight_; | |
106 int blueShiftRight_; | |
107 int redShiftLeft_; | |
108 int greenShiftLeft_; | |
109 int blueShiftLeft_; | |
110 uint8* output_; | |
111 bool inverted_; | |
112 }; | |
113 | |
114 } // namespace | |
115 | |
116 #endif | |
OLD | NEW |