diff options
Diffstat (limited to 'lib/Image.cc')
-rw-r--r-- | lib/Image.cc | 176 |
1 files changed, 88 insertions, 88 deletions
diff --git a/lib/Image.cc b/lib/Image.cc index d098de3..19d8aff 100644 --- a/lib/Image.cc +++ b/lib/Image.cc @@ -1,88 +1,88 @@ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include "Image.h" -#include "gettext.h" - -Image::Image(unsigned int ax, unsigned int ay) : x(ax), y(ay), img((Color *) malloc(x * y * sizeof(Color))) { - Fill(); -} - -Image::~Image() { - free(img); -} - -bool Image::CanWrite() const { - return false; -} - -String Image::GetName() const { - return String(_("Image ")) + x + "x" + y; -} - -void Image::Fill(Color c) { - for (unsigned int i = 0; i < x * y; i++) { - img[i] = c; - } -} - -Color Image::GetPixel(unsigned int px, unsigned int py) const { - if ((px >= x) || (py >= y)) { - return Color(0, 0, 0, 0); - } - - return img[x * py + px]; -} - -void Image::SetPixel(unsigned int px, unsigned int py, Color c) { - if ((px >= x) || (py >= y)) { - return; - } - - img[x * py + px] = c; -} - -#ifndef WORDS_BIGENDIAN -#define WORDS_BIGENDIAN 0 -#else -#undef WORDS_BIGENDIAN -#define WORDS_BIGENDIAN 1 -#endif - -bool Image::Prepare(unsigned int f) { - if (GetSize()) return false; - - switch (f) { - case FORMAT_TGA_BASIC: - TGAHeader Header; - TGAFooter Footer; - - Header.IDLength = 0; - Header.ColorMapType = 0; - Header.ImageType = 2; - Header.CM_FirstEntry = 0; - Header.CM_Length = 0; - Header.CM_EntrySize = 0; - Header.IS_XOrigin = 0; - Header.IS_YOrigin = 0; - Header.IS_Width = WORDS_BIGENDIAN ? ((x & 0xff) << 8) | ((x & 0xff00) >> 8) : x; - Header.IS_Height = WORDS_BIGENDIAN ? ((y & 0xff) << 8) | ((y & 0xff00) >> 8) : y; - Header.IS_Depth = 32; - Header.IS_Descriptor = 0x20; - - Footer.ExtOffset = 0; - Footer.DevOffset = 0; - strcpy(Footer.Sig, "TRUEVISION-XFILE."); - - write(&Header, sizeof(Header)); - write(img, x * y * sizeof(Color)); - write(&Footer, sizeof(Footer)); - - return true; - - break; - default: - return false; - } -} - +#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include "Image.h"
+#include "gettext.h"
+
+Image::Image(unsigned int ax, unsigned int ay) : x(ax), y(ay), img((Color *) malloc(x * y * sizeof(Color))) {
+ Fill();
+}
+
+Image::~Image() {
+ free(img);
+}
+
+bool Image::CanWrite() const {
+ return false;
+}
+
+String Image::GetName() const {
+ return String(_("Image ")) + x + "x" + y;
+}
+
+void Image::Fill(Color c) {
+ for (unsigned int i = 0; i < x * y; i++) {
+ img[i] = c;
+ }
+}
+
+Color Image::GetPixel(unsigned int px, unsigned int py) const {
+ if ((px >= x) || (py >= y)) {
+ return Color(0, 0, 0, 0);
+ }
+
+ return img[x * py + px];
+}
+
+void Image::SetPixel(unsigned int px, unsigned int py, Color c) {
+ if ((px >= x) || (py >= y)) {
+ return;
+ }
+
+ img[x * py + px] = c;
+}
+
+#ifndef WORDS_BIGENDIAN
+#define WORDS_BIGENDIAN 0
+#else
+#undef WORDS_BIGENDIAN
+#define WORDS_BIGENDIAN 1
+#endif
+
+bool Image::Prepare(unsigned int f) {
+ if (GetSize()) return false;
+
+ switch (f) {
+ case FORMAT_TGA_BASIC:
+ TGAHeader Header;
+ TGAFooter Footer;
+
+ Header.IDLength = 0;
+ Header.ColorMapType = 0;
+ Header.ImageType = 2;
+ Header.CM_FirstEntry = 0;
+ Header.CM_Length = 0;
+ Header.CM_EntrySize = 0;
+ Header.IS_XOrigin = 0;
+ Header.IS_YOrigin = 0;
+ Header.IS_Width = WORDS_BIGENDIAN ? ((x & 0xff) << 8) | ((x & 0xff00) >> 8) : x;
+ Header.IS_Height = WORDS_BIGENDIAN ? ((y & 0xff) << 8) | ((y & 0xff00) >> 8) : y;
+ Header.IS_Depth = 32;
+ Header.IS_Descriptor = 0x20;
+
+ Footer.ExtOffset = 0;
+ Footer.DevOffset = 0;
+ strcpy(Footer.Sig, "TRUEVISION-XFILE.");
+
+ write(&Header, sizeof(Header));
+ write(img, x * y * sizeof(Color));
+ write(&Footer, sizeof(Footer));
+
+ return true;
+
+ break;
+ default:
+ return false;
+ }
+}
+
|