summaryrefslogtreecommitdiff
path: root/bitmap.c
diff options
context:
space:
mode:
Diffstat (limited to 'bitmap.c')
-rw-r--r--bitmap.c102
1 files changed, 102 insertions, 0 deletions
diff --git a/bitmap.c b/bitmap.c
new file mode 100644
index 0000000..44ebdbd
--- /dev/null
+++ b/bitmap.c
@@ -0,0 +1,102 @@
+/*
+ * targavfd plugin for VDR (C++)
+ *
+ * (C) 2010 Andreas Brachold <vdr07 AT deltab de>
+ *
+ * This targavfd plugin is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as published
+ * by the Free Software Foundation, version 3 of the License.
+ *
+ * See the files README and COPYING for details.
+ *
+ */
+
+#include <vdr/tools.h>
+#include "bitmap.h"
+
+cVFDBitmap::cVFDBitmap(int w, int h) {
+ width = w;
+ height = h;
+
+ // lines are byte aligned
+ bytesPerLine = (width + 7) / 8;
+
+ bitmap = MALLOC(uchar, bytesPerLine * height);
+ clear();
+}
+
+cVFDBitmap::cVFDBitmap() {
+ height = 0;
+ width = 0;
+ bitmap = NULL;
+}
+
+cVFDBitmap::~cVFDBitmap() {
+
+ if(bitmap)
+ free(bitmap);
+ bitmap = NULL;
+}
+
+cVFDBitmap& cVFDBitmap::operator = (const cVFDBitmap& x) {
+
+ if(height != x.height
+ || width != x.width
+ || bitmap == NULL) {
+
+ if(bitmap)
+ free(bitmap);
+ bitmap = NULL;
+
+ height = x.height;
+ width = x.width;
+
+ bytesPerLine = (width + 7) / 8;
+
+ if(height && width)
+ bitmap = MALLOC(uchar, bytesPerLine * height);
+ }
+ if(x.bitmap)
+ memcpy(bitmap, x.bitmap, bytesPerLine * height);
+ return *this;
+}
+
+bool cVFDBitmap::operator == (const cVFDBitmap& x) const {
+
+ if(height != x.height
+ || width != x.width
+ || bitmap == NULL
+ || x.bitmap == NULL)
+ return false;
+ return ((memcmp(x.bitmap, bitmap, bytesPerLine * height)) == 0);
+}
+
+
+void cVFDBitmap::clear() {
+ if (bitmap)
+ memset(bitmap, 0x00, bytesPerLine * height);
+}
+
+bool cVFDBitmap::SetPixel(int x, int y)
+{
+ unsigned char c;
+ unsigned int n;
+
+ if (!bitmap)
+ return false;
+
+ if (x >= width || x < 0)
+ return false;
+ if (y >= height || y < 0)
+ return false;
+
+ n = x + ((y / 8) * width);
+ c = 0x80 >> (y % 8);
+
+ if(n >= (bytesPerLine * height))
+ return false;
+
+ bitmap[n] |= c;
+ return true;
+}
+