diff options
author | Pixel <Pixel> | 2002-07-21 11:12:13 +0000 |
---|---|---|
committer | Pixel <Pixel> | 2002-07-21 11:12:13 +0000 |
commit | 6528f07c516efe4d3b344f01740067878d5d9a43 (patch) | |
tree | f097e6797752dffe7b498a4f153e83bdeb59f024 /generic/Image.cpp | |
parent | b54786a5120b48bd98fc4b199176d45bda3c2d67 (diff) |
Hello Baltisot
Diffstat (limited to 'generic/Image.cpp')
-rw-r--r-- | generic/Image.cpp | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/generic/Image.cpp b/generic/Image.cpp new file mode 100644 index 0000000..1270a6a --- /dev/null +++ b/generic/Image.cpp @@ -0,0 +1,86 @@ +#include "Image.h" +#ifdef HAVE_CONFIG_H +#include "config.h" +#else +#define _(x) x +#endif + +Image::Image(unsigned int ax, unsigned int ay) : x(ax), y(ay), img((Color *) malloc(x * y * sizeof(Color))) { + Fill(); +} + +Image::~Image() { + free((void *)img); +} + +bool Image::CanWrite() { + return false; +} + +String Image::GetName() { + 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) { + 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 +#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; + } +} + |