none
DrawStringでミャンマー語・シンハラ語などを正しく表示するには? RRS feed

  • 質問

  • 工藤@NCPLと申します。お世話になります。

    Graphics::DrawStringで、シンハラ語、ミャンマー語等のように、複数の文字要素で1文字を表示する言語を正しく表示するにはどのようにすればよいのでしょうか?多少調べて見ましたが、解決の糸口がつかめずにこちらへ投稿します。

    具体的には下記のコード(シンハラ語の例)を実行したところ、エディタで見たソースコード上、あるいは同じ文字列をWordで表示させた文字列と異なる文字が表示されました。
    • お客様のアカウントが確認されるまで、本文に画像やリンクを含むことはできません

    とのことで画像は貼れませんでした。

    	     //描画先とするImageオブジェクトを作成する
                Bitmap canvas = new Bitmap(pictureBox1.Width, pictureBox1.Height);
                //ImageオブジェクトのGraphicsオブジェクトを作成する
                Graphics g = Graphics.FromImage(canvas);
    
                //フォントオブジェクトの作成
                Font fnt = new Font("Iskoola Pota", 32);
                //文字列を位置(0,0)、青色で表示
                g.DrawString("ලේසර් ටෙස්ට් ලකුණු", fnt, Brushes.Blue, 0, 0);
    
                //リソースを解放する
                fnt.Dispose();
                g.Dispose();
    
                //PictureBox1に表示する
                pictureBox1.Image = canvas;

    最終的には文字列を所定の解像度でビットマップに展開した画像が得られればよいので、

    DrawString以外の方法でも結構です。(.Net(C#)でなくてMFC(VC++)でも)

    問題解決の糸口になる情報が頂けたら幸甚です。


    2017年6月5日 2:36

回答

  • GDI+が対応できていないっぽいかな?

    System.Windows.Forms.TextRendererクラスのDrawTextであれば正しく描画できるようですね。ということは多分ExtTextOut関数辺りでも。

    <追記>あ、確認はWin7で行いました。</追記>
    • 編集済み Hongliang 2017年6月5日 3:29
    • 回答としてマーク Yuichi Kudo 2017年6月5日 4:08
    2017年6月5日 3:23

すべての返信

  • GDI+が対応できていないっぽいかな?

    System.Windows.Forms.TextRendererクラスのDrawTextであれば正しく描画できるようですね。ということは多分ExtTextOut関数辺りでも。

    <追記>あ、確認はWin7で行いました。</追記>
    • 編集済み Hongliang 2017年6月5日 3:29
    • 回答としてマーク Yuichi Kudo 2017年6月5日 4:08
    2017年6月5日 3:23
  • ありがとうございます。

    手元の環境でも (windows7 64bit/VS2015/C#)

    System.Windows.Forms.TextRenderer.DrawText で思惑通りの描画を確認出来ました。

    ありがとうございました。

    2017年6月5日 3:34