7 int main(int argc, char **argv);
10 * @brief 独自に規定したキャンバス構造。
12 * このサンプルでは、汎用プラットフォーム向けなのでメモリ上に画像を格納する。
15 int w; /**< 横方向サイズ。 */
16 int h; /**< 縦方向サイズ。 */
17 bmpcol_t *buffer; /**< バッファへのポインタ。 */
21 * @brief ストリームからデータを読み込む。
23 * インターフェースでは、何からどのように読み込むかについて一切感知していない。
24 * この関数では、何からどのように読み込むかについて解決する。
26 * @param buf バッファへのポインタ。
27 * @param size 読み込みバイトサイズ。
28 * @param extobj ユーザが指定した拡張オブジェクト。
30 int func_fread(void *buf, const unsigned int size, void *extobj)
32 FILE *fp = (FILE *)extobj;
33 return fread(buf, size, 1, fp);
37 * @brief ストリームへデータを書き込む。
39 * インターフェースでは、何にどのように書き込むかについて一切感知していない。
40 * この関数では、何にどのように書き込むかについて解決する。
42 * @param buf バッファへのポインタ。
43 * @param size 書き込みバイトサイズ。
44 * @param extobj ユーザが指定した拡張オブジェクト。
46 int func_fwrite(const void *buf, const unsigned int size, void *extobj)
48 FILE *fp = (FILE *)extobj;
49 return fwrite(buf, size, 1, fp);
55 * インターフェースでは、何にどのように書き込むかについて一切感知していない。
56 * この関数では、何にどのように書き込むかについて解決する。
63 * @param extobj ユーザが指定した拡張オブジェクト。
65 void func_pixel_write(const int x, const int y, const uint8_t r, const uint8_t g, const uint8_t b, void *extobj)
67 canvas_t *canvas = (canvas_t *)extobj;
68 bmpcol_t *buffer = canvas->buffer + (canvas->w * y) + x;
77 * インターフェースでは、何からどのように読み込むかについて一切感知していない。
78 * この関数では、何からどのように読み込むかについて解決する。
85 * @param extobj ユーザが指定した拡張オブジェクト。
87 void func_pixel_read(const int x, const int y, uint8_t *r, uint8_t *g, uint8_t *b, void *extobj)
89 canvas_t *canvas = (canvas_t *)extobj;
90 bmpcol_t *buffer = canvas->buffer + (canvas->w * y) + x;
96 void lcdimg_drawer(const int px, const int py, bool on, void *extobj)
98 canvas_t *canvas = (canvas_t *)extobj;
99 bmpcol_t *buffer = canvas->buffer + (canvas->w * py) + px;
100 buffer->r = on ? 255 : 16;
101 buffer->g = on ? 255 : 16;
102 buffer->b = on ? 255 : 16;
105 int main(int argc, char **argv)
107 const int imgw = 800;
108 const int imgh = 600;
115 * 画像ピクセルを格納する領域を確保する。
119 canvas.buffer = (bmpcol_t *)malloc(sizeof(bmpcol_t) * imgw * imgh);
124 * ピクセル入出力関数を渡して初期化する。
125 * ユーザが指定可能な拡張オブジェクトに、独自に規定したキャンバスを渡しておく。
127 bmpimg_open(&bmpimg, imgw, imgh, func_pixel_write, &canvas, func_pixel_read, &canvas);
129 lcdimg = lcdimg_open(8, 2);
130 lcdimg_text(lcdimg, 0, 0, 'T');
131 lcdimg_text(lcdimg, 1, 0, 'e');
132 lcdimg_text(lcdimg, 2, 0, 's');
133 lcdimg_text(lcdimg, 3, 0, 't');
135 lcdimg_draw(lcdimg, lcdimg_drawer, &canvas);
137 fp = fopen("lcdimg.bmp", "wb");
139 bmpimg_bmp_write(&bmpimg, func_fwrite, fp);
143 lcdimg_close(lcdimg);
148 bmpimg_close(&bmpimg);
151 * 画像ピクセルを格納する領域を破棄する。