#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
* インターフェースでは、何からどのように読み込むかについて一切感知していない。
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 = 240;
* ピクセル入出力関数を渡して初期化する。
* ユーザが指定可能な拡張オブジェクトに、独自に規定したキャンバスを渡しておく。
*/
- 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);
lcdimg = lcdimg_open(8, 2);
lcdimg_text(lcdimg, 0, 0, 'T');
lcdimg_text(lcdimg, 2, 0, 's');
lcdimg_text(lcdimg, 3, 0, 't');
- lcdimg_draw(lcdimg, lcdimg_drawer, &canvas);
+ lcdimg_draw(lcdimg, canvas_drawer, &canvas);
fp = fopen("lcdimg.bmp", "wb");
if (fp != NULL) {