LoginSignup
1
1

More than 5 years have passed since last update.

Raspberry PiとopenFrameworksで日本語TrueTypeFont

Posted at

ofxTrueTypeFontUCを使ってRaspberryPi+openFrameworksで日本語を描画しようとしてみたけどうまく表示されず。

drawString内でconvToUTF32を使ってUTF-8から変換してるところを置き換えたら表示されたから、convToUTF32関数の問題っぽい。

ofxTrueTypeFontUC.cpp
void ofxTrueTypeFontUC::drawString(const string &src, float x, float y){
  if (!mImpl->bLoadedOk_) {
    ofLog(OF_LOG_ERROR,"ofxTrueTypeFontUC::drawString - Error : font not allocated -- line %d in %s", __LINE__,__FILE__);
    return;
  }

  GLint index   = 0;
  GLfloat X = x;
  GLfloat Y = y;

  basic_string<unsigned int> utf32_src;//convToUTF32(src);
  utf32_src += 0x00003042;//あ
  utf32_src += 0x00003042;//あ
  utf32_src += 0x00003042;//あ

  int len = (int)utf32_src.length();
  int c, cy;

  while (index < len) {
    (...)

convToUTF32で受け取ってる文字列を試しに出力してみたら、なんとShift_JIS。

ofxTrueTypeFontUC.cpp
static const basic_string<unsigned int> convToUTF32(const string &utf8_src){
  basic_string<unsigned int> dst;


  // convert UTF-8 -> UTF-32 (UCS-4)
  int size = utf8_src.size();
  int index = 0;
  for (int i = 0; i < size; i++) {
      wchar_t c = (unsigned char)utf8_src[i];
      printf("convToUTF32,%d: 0x%04x\n", i, c);
  }
  while (index < size) {
    (...)

ofApp.cpp
void ofApp::draw(){
  mainFont.drawString("hogeあぁい", 900, 100);
}
出力
convToUTF32,0: 0x0068
convToUTF32,1: 0x006f
convToUTF32,2: 0x0067
convToUTF32,3: 0x0065
convToUTF32,4: 0x0082
convToUTF32,5: 0x00a0
convToUTF32,6: 0x0082
convToUTF32,7: 0x009f
convToUTF32,8: 0x0082
convToUTF32,9: 0x00a2

ofApp.cppをUTF-8で保存してあげるとうまくいきました。
Visual Studioでは、「名前を付けて保存」->「上書き保存」の右の小さい三角->「エンコード付きで保存」です。
スクリーンショット 2018-02-09 01.10.09.png

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1