summaryrefslogtreecommitdiff
path: root/glcdgraphics/bitmap.c
diff options
context:
space:
mode:
authormrwastl <mrwastl@users.sourceforge.net>2011-06-27 01:14:43 +0200
committermrwastl <mrwastl@users.sourceforge.net>2011-06-27 01:14:43 +0200
commit27199225f8570472322971eb3059be64bd6cfe43 (patch)
treed12aa453ca0643590530f95df654e94f6132c1f7 /glcdgraphics/bitmap.c
parent36d9aedc21b06eb5d73b60072aed0163a2f82aca (diff)
downloadgraphlcd-base-27199225f8570472322971eb3059be64bd6cfe43.tar.gz
graphlcd-base-27199225f8570472322971eb3059be64bd6cfe43.tar.bz2
fix some memory allocation bugs; fix cPBMFile::Save() to work with 32bpp internal colour representation
Diffstat (limited to 'glcdgraphics/bitmap.c')
-rw-r--r--glcdgraphics/bitmap.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/glcdgraphics/bitmap.c b/glcdgraphics/bitmap.c
index 1c5e4ed..dbeb27d 100644
--- a/glcdgraphics/bitmap.c
+++ b/glcdgraphics/bitmap.c
@@ -97,8 +97,10 @@ cBitmap::cBitmap(int width, int height, uint32_t initcol)
printf("%s:%s(%d) cBitmap Size %03d * %03d\n", __FILE__, __FUNCTION__, __LINE__, width, height);
#endif
- bitmap = new uint32_t[width * height];
- Clear(initcol);
+ if (width > 0 && height > 0) {
+ bitmap = new uint32_t[width * height];
+ Clear(initcol);
+ }
}
cBitmap::cBitmap(const cBitmap & b)
@@ -117,7 +119,9 @@ cBitmap::cBitmap(const cBitmap & b)
cBitmap::~cBitmap()
{
- delete[] bitmap;
+ if (bitmap)
+ delete[] bitmap;
+ bitmap = NULL;
}
void cBitmap::Clear(uint32_t color)
@@ -726,6 +730,11 @@ int cBitmap::DrawCharacter(int x, int y, int xmax, uint32_t c, const cFont * fon
uint32_t cBitmap::GetPixel(int x, int y) const
{
+ if (x < 0 || x > width - 1)
+ return cColor::Transparent;
+ if (y < 0 || y > height - 1)
+ return cColor::Transparent;
+
uint32_t value;
value = bitmap[y * width + x];
return value;
@@ -756,6 +765,7 @@ cBitmap * cBitmap::SubBitmap(int x1, int y1, int x2, int y2) const
if (!bmp || !bmp->Data())
return NULL;
bmp->Clear();
+ bmp->SetMonochrome(this->IsMonochrome());
for (yt = 0; yt < h; yt++)
{
@@ -848,7 +858,8 @@ bool cBitmap::LoadPBM(const std::string & fileName)
str[i] = 0;
h = atoi(str);
- delete[] bitmap;
+ if (bitmap)
+ delete[] bitmap;
width = w;
height = h;
bitmap = new uint32_t [width * height];