jpfont_test.cpp 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #include <stdio.h>
  2. #include "pico/stdlib.h"
  3. #include "pfnfont.h"
  4. __asm(\
  5. ".section \".rodata\" \n"
  6. ".balign 4\n"
  7. ".global _pfnfont_data\n"
  8. ".global _pfnfont_data_len\n"
  9. "_pfnfont_data:\n"
  10. ".incbin \"shnmk14u.pfn\"\n"
  11. ".set _pfnfont_data_len, . - _pfnfont_data\n"
  12. ".section \".text\"\n"
  13. );
  14. extern const uint8_t _pfnfont_data[];
  15. extern uint32_t _pfnfont_data_len;
  16. // ターミナルにアスキーアートとしてフォントを描画するコールバック関数
  17. void draw_font_to_terminal(font_gryph_t *gryph, int x, int y) {
  18. printf("--- Glyph at (%d, %d) ---\n", x, y);
  19. for (int r = 0; r < gryph->height; r++) {
  20. for (int c = 0; c < gryph->width; c++) {
  21. // ビットマップからピクセルデータを取得
  22. int bit_index = r * gryph->width + c;
  23. int byte_index = bit_index / 8;
  24. int bit_offset = 7 - (bit_index % 8);
  25. if ((gryph->bitmap[byte_index] >> bit_offset) & 1) {
  26. printf("#"); // ピクセルがオン
  27. } else {
  28. printf(" "); // ピクセルがオフ
  29. }
  30. }
  31. printf("\n");
  32. }
  33. printf("-----------------------\n");
  34. }
  35. int main()
  36. {
  37. stdio_init_all();
  38. // 描画コールバック関数を渡してPFNFontオブジェクトを生成
  39. PFNFont *pfn = new PFNFont((uint8_t *)_pfnfont_data, (size_t)&_pfnfont_data_len, draw_font_to_terminal);
  40. // フォントが正しく読み込めたかチェック
  41. if (pfn->isValid()) {
  42. printf("Font loaded successfully.\n");
  43. pfn->draw_string("Picoで日本語表示!", 0, 0);
  44. } else {
  45. printf("Failed to load font.\n");
  46. }
  47. // メモリを解放
  48. delete pfn;
  49. while (true)
  50. tight_loop_contents();
  51. }