スポンサーリンク

HarfBuzzでFreeType2のレイアウトを調整(2)ラテン系文字とか絵文字

前回作ったプログラムでラテン系の文字や絵文字を描いてみる。

アルファベットの上にaccentがついているもの

int main()
{

  FT_Library  library;
  FT_Error error;

  error = FT_Init_FreeType(&library);
  if (error)
    return -1;


  /////////////////////////////////////////////
  FT_Face* face_jp = my_LoadFonts(library, "C:\\Windows\\Fonts\\Times.ttf");
  ////////////////////////
  hb_font_t* hbfont;
  hb_buffer_t* hbbuf;
  ////////////////////////
  std::u32string text = U"àbâáăã";
  ////////////////////////
  hbbuf = hb_buffer_create();
  hb_buffer_add_utf32(hbbuf, (const std::uint32_t*)text.data(), -1, 0, -1);
  hb_buffer_set_direction(hbbuf, HB_DIRECTION_LTR);
  hb_buffer_set_script(hbbuf, HB_SCRIPT_LATIN);
  hb_buffer_set_language(hbbuf, hb_language_from_string("en", -1));
  ////////////////////////
  hbfont = hb_ft_font_create(*face_jp, nullptr);
  hb_shape(hbfont, hbbuf, NULL, 0);
  ////////////////////////
  my_FaceDraw(hbbuf, face_jp);
  ////////////////////////
  hb_buffer_destroy(hbbuf);
  hb_font_destroy(hbfont);
  ////////////////////////
  FT_Done_Face(*face_jp);

  pbmP1_Write("C:\\test\\freetypetest_mgl.pbm", imageWidth, imageHeight, &image[0]);

  /////////////////////////////////////////////

  // FreeType2の解放
  FT_Done_FreeType(library);
}

絵文字

int main()
{

  FT_Library  library;
  FT_Error error;

  error = FT_Init_FreeType(&library);
  if (error)
    return -1;


  /////////////////////////////////////////////
  FT_Face* face_jp = my_LoadFonts(library, "C:\\Windows\\Fonts\\seguiemj.ttf");
  ////////////////////////
  hb_font_t* hbfont;
  hb_buffer_t* hbbuf;
  ////////////////////////
  std::u32string text = U"👨‍👨‍👧‍👦";//FreeType2だけだと5つの絵文字になる
  ////////////////////////
  hbbuf = hb_buffer_create();
  hb_buffer_add_utf32(hbbuf, (const std::uint32_t*)text.data(), -1, 0, -1);
  hb_buffer_set_direction(hbbuf, HB_DIRECTION_LTR);
  hb_buffer_set_script(hbbuf, HB_SCRIPT_LATIN);//一応LATIN指定しておく
  hb_buffer_set_language(hbbuf, hb_language_from_string("en", -1));//一応en指定しておく
  ////////////////////////
  hbfont = hb_ft_font_create(*face_jp, nullptr);
  hb_shape(hbfont, hbbuf, NULL, 0);
  ////////////////////////
  my_FaceDraw(hbbuf, face_jp);
  ////////////////////////
  hb_buffer_destroy(hbbuf);
  hb_font_destroy(hbfont);
  ////////////////////////
  FT_Done_Face(*face_jp);

  pbmP1_Write("C:\\test\\freetypetest_mge.pbm", imageWidth, imageHeight, &image[0]);

  /////////////////////////////////////////////

  // FreeType2の解放
  FT_Done_FreeType(library);
}

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: