Merged changes in the trunk up to revision 53146.
[blender.git] / source / blender / imbuf / intern / dds / Image.cpp
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * Contributors: Amorilia (amorilia@users.sourceforge.net)
19  *
20  * ***** END GPL LICENSE BLOCK *****
21  */
22
23 /** \file blender/imbuf/intern/dds/Image.cpp
24  *  \ingroup imbdds
25  */
26
27
28 /*
29  * This file is based on a similar file from the NVIDIA texture tools
30  * (http://nvidia-texture-tools.googlecode.com/)
31  *
32  * Original license from NVIDIA follows.
33  */
34
35 // This code is in the public domain -- castanyo@yahoo.es
36
37 #include <Color.h>
38 #include <Image.h>
39
40 #include <stdio.h> // printf
41
42 Image::Image() : m_width(0), m_height(0), m_format(Format_RGB), m_data(NULL)
43 {
44 }
45
46 Image::~Image()
47 {
48         free();
49 }
50
51 void Image::allocate(uint w, uint h)
52 {
53         free();
54         m_width = w;
55         m_height = h;
56         m_data = new Color32[w * h];
57 }
58
59 void Image::free()
60 {
61         if (m_data) delete [] m_data;
62         m_data = NULL;
63 }
64
65
66 uint Image::width() const
67 {
68         return m_width;
69 }
70
71 uint Image::height() const
72 {
73         return m_height;
74 }
75
76 const Color32 * Image::scanline(uint h) const
77 {
78         if (h >= m_height) {
79                 printf("DDS: scanline beyond dimensions of image");
80                 return m_data;
81         }
82         return m_data + h * m_width;
83 }
84
85 Color32 * Image::scanline(uint h)
86 {
87         if (h >= m_height) {
88                 printf("DDS: scanline beyond dimensions of image");
89                 return m_data;
90         }
91         return m_data + h * m_width;
92 }
93
94 const Color32 * Image::pixels() const
95 {
96         return m_data;
97 }
98
99 Color32 * Image::pixels()
100 {
101         return m_data;
102 }
103
104 const Color32 & Image::pixel(uint idx) const
105 {
106         if (idx >= m_width * m_height) {
107                 printf("DDS: pixel beyond dimensions of image");
108                 return m_data[0];
109         }
110         return m_data[idx];
111 }
112
113 Color32 & Image::pixel(uint idx)
114 {
115         if (idx >= m_width * m_height) {
116                 printf("DDS: pixel beyond dimensions of image");
117                 return m_data[0];
118         }
119         return m_data[idx];
120 }
121
122
123 Image::Format Image::format() const
124 {
125         return m_format;
126 }
127
128 void Image::setFormat(Image::Format f)
129 {
130         m_format = f;
131 }
132
133