OSDN Git Service

Added the image canvas object.
[bluetank/bluetank.git] / soft / utils / lcdtool / canvas.c
diff --git a/soft/utils/lcdtool/canvas.c b/soft/utils/lcdtool/canvas.c
new file mode 100644 (file)
index 0000000..f168a30
--- /dev/null
@@ -0,0 +1,56 @@
+
+#include "canvas.h"
+
+/**
+ * @brief ピクセル値を書き込む。
+ * @details
+ * インターフェースでは、何にどのように書き込むかについて一切感知していない。
+ * この関数では、何にどのように書き込むかについて解決する。
+ *
+ * @param x X座標。
+ * @param y Y座標。
+ * @param r 赤。
+ * @param g 緑。
+ * @param b 青。
+ * @param extobj ユーザが指定した拡張オブジェクト。
+ */
+void canvas_pixel_writer(const int x, const int y, const uint8_t r, const uint8_t g, const uint8_t b, void *extobj)
+{
+    canvas_t *canvas = (canvas_t *)extobj;
+    bmpcol_t *buffer = canvas->buffer + (canvas->w * y) + x;
+    buffer->r = r;
+    buffer->g = g;
+    buffer->b = b;
+}
+
+/**
+ * @brief ピクセル値を読み込む。
+ * @details
+ * インターフェースでは、何からどのように読み込むかについて一切感知していない。
+ * この関数では、何からどのように読み込むかについて解決する。
+ *
+ * @param x X座標。
+ * @param y Y座標。
+ * @param r 赤。
+ * @param g 緑。
+ * @param b 青。
+ * @param extobj ユーザが指定した拡張オブジェクト。
+ */
+void canvas_pixel_reader(const int x, const int y, uint8_t *r, uint8_t *g, uint8_t *b, void *extobj)
+{
+    canvas_t *canvas = (canvas_t *)extobj;
+    bmpcol_t *buffer = canvas->buffer + (canvas->w * y) + x;
+    *r = buffer->r;
+    *g = buffer->g;
+    *b = buffer->b;
+}
+
+void canvas_drawer(const int px, const int py, bool on, void *extobj)
+{
+    canvas_t *canvas = (canvas_t *)extobj;
+    bmpcol_t *buffer = canvas->buffer + (canvas->w * py) + px;
+    buffer->r = on ? 255 : 16;
+    buffer->g = on ? 255 : 16;
+    buffer->b = on ? 255 : 16;
+}
+