OSDN Git Service

Changed the color scheme.
[bluetank/bluetank.git] / soft / utils / lcdtool / main.c
index 9e01e8b..b8ce019 100644 (file)
@@ -1,23 +1,14 @@
 
 #include <stdio.h>
+#include <string.h>
 #include <stdlib.h>
 #include "bmpimg.h"
 #include "lcdimg.h"
+#include "canvas.h"
 
 int main(int argc, char **argv);
 
 /**
- * @brief 独自に規定したキャンバス構造。
- * @details
- * このサンプルでは、汎用プラットフォーム向けなのでメモリ上に画像を格納する。
- */
-typedef struct {
-    int w;              /**< 横方向サイズ。 */
-    int h;              /**< 縦方向サイズ。 */
-    bmpcol_t *buffer;   /**< バッファへのポインタ。 */
-} canvas_t;
-
-/**
  * @brief ストリームからデータを読み込む。
  * @details
  * インターフェースでは、何からどのように読み込むかについて一切感知していない。
@@ -49,67 +40,21 @@ int func_fwrite(const void *buf, const unsigned int size, void *extobj)
     return fwrite(buf, size, 1, fp);
 }
 
-/**
- * @brief ピクセル値を書き込む。
- * @details
- * インターフェースでは、何にどのように書き込むかについて一切感知していない。
- * この関数では、何にどのように書き込むかについて解決する。
- *
- * @param x X座標。
- * @param y Y座標。
- * @param r 赤。
- * @param g 緑。
- * @param b 青。
- * @param extobj ユーザが指定した拡張オブジェクト。
- */
-void func_pixel_write(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 func_pixel_read(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 lcdimg_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;
-}
-
 int main(int argc, char **argv)
 {
-    const int imgw = 800;
-    const int imgh = 600;
+    const int imgw = 240;
+    const int imgh = 110;
     canvas_t canvas;
     bmpimg_t bmpimg;
+    bmpcol_t col;
     LCDIMG *lcdimg;
     FILE *fp;
+    int i;
+
+    if (argc != 4) {
+        printf("lcdtool [file] [line1] [line2]\n");
+        exit(1);
+    }
 
     /*
      * 画像ピクセルを格納する領域を確保する。
@@ -124,17 +69,22 @@ int main(int argc, char **argv)
      * ピクセル入出力関数を渡して初期化する。
      * ユーザが指定可能な拡張オブジェクトに、独自に規定したキャンバスを渡しておく。
      */
-    bmpimg_open(&bmpimg, imgw, imgh, func_pixel_write, &canvas, func_pixel_read, &canvas);
+    bmpimg_open(&bmpimg, imgw, imgh, canvas_pixel_writer, &canvas, canvas_pixel_reader, &canvas);
+
+    BMPIMG_SET_COLOR(col, 124, 120, 230);
+    bmpimg_fill_box(&bmpimg, 0, 0, imgw - 1, imgh - 1, &col);
 
     lcdimg = lcdimg_open(8, 2);
-    lcdimg_text(lcdimg, 0, 0, 'T');
-    lcdimg_text(lcdimg, 1, 0, 'e');
-    lcdimg_text(lcdimg, 2, 0, 's');
-    lcdimg_text(lcdimg, 3, 0, 't');
+    for (i = 0; i < strlen(argv[2]); i++) {
+        lcdimg_text(lcdimg, i, 0, argv[2][i]);
+    }
+    for (i = 0; i < strlen(argv[3]); i++) {
+        lcdimg_text(lcdimg, i, 1, argv[3][i]);
+    }
 
-    lcdimg_draw(lcdimg, lcdimg_drawer, &canvas);
+    lcdimg_draw(lcdimg, canvas_drawer, &canvas);
 
-    fp = fopen("lcdimg.bmp", "wb");
+    fp = fopen(argv[1], "wb");
     if (fp != NULL) {
         bmpimg_bmp_write(&bmpimg, func_fwrite, fp);
         fclose(fp);