Nanashi-softプログラマ専用BD-J


◇BD-J-フォントを変える-

BD-Jでは既存のフォントと言う概念が無いようです
製作者が必要なフォントをディスクに入れておくと言う考えかたです
Blu-Rayディスクは大容量なので、フォントファイルのサイズなど大した事は無いと言う考えなのでしょう

○ディスクイメージ付属のフォントを使う

Minimal BD-J (Java) Devkit for PS3、HD cookbookのどちらを使ったとしても、ディスクイメージに付属のフォントがあります
恐らく Devkitが、HDcookbookのディスクイメージを元に作成されたのだと思われます

AVCHD
|-BDMV
  |-AUXDATA
   |-00000.otf
   |-00001.otf
   |-dvb.fontindex
AUXDATAに格納されているのがフォントです

OTFファイルはオープンタイプフォントで、ダブルクリックすればどんなフォントなのか見ることができます
Windowsで使えるフォーマットのフォントです
一般的には TTF(トゥルータイプフォント)の方が多く使われていますが、どちらも考え方は同じ意味のファイルです

これをプログラムから呼び出すには、dvb.fontindexに記述された nameタグを使って、以下のようにします

public class MyXlet extends Component implements Xlet, ControllerListener, KeyListener{
  //~他の宣言~
  Font oUseFont;
  FontFactory oUseFontF;

  public void initXlet(XletContext context){
    //~他のプログラム~
    try{
      oUseFontF= new FontFactory();
      oUseFont= oUseFontF.createFont("Arial", java.awt.Font.BOLD,36);
    }catch(Exception e){}
  }

  public void paint(Graphics g){
    //~他のプログラム~
    g.setFont(oUseFont);
    g.drawString("文字列", 0, 0);
  }

○日本語フォントを追加する

付属フォントは英字のみです
新しいフォントを追加するには、AUXDATAフォルダにフォントファイルを入れて、dvb.fontindexファイルに fontエレメントを追記する必要があります

AVCHD
|-BDMV
  |-AUXDATA
   |-00000.otf
   |-00001.otf
   |-00002.otf  ←追加
   |-dvb.fontindex ←追記する
ファイル名は 00000からの連番でなければなりません
重複すると PS3でフリーズを引き起こしました

AVCHD
|-BDMV
  |-AUXDATA
   |-00000.otf
   |-00001.otf
   |-00001.ttf  ←こういうのはダメです
   |-dvb.fontindex

dvb.fontindexに 00002.otfを追記します

<?xml version="1.0"?>
<!DOCTYPE fontdirectory PUBLIC "-//DVB//DTD Font Directory 1.0//EN"
"http://www.dvb.org/mhp/dtd/fontdirectory-1-0.dtd">
<fontdirectory>
  <font>
    <name>Arial</name>
    <fontformat>OTF</fontformat>
    <filename>00000.otf</filename>
    <style>BOLD</style>
  </font>
  <font>
    <name>NewsGothicStd</name>
    <fontformat>OTF</fontformat>
    <filename>00001.otf</filename>
    <style>BOLD</style>
  </font>
  <font>
    <name>NihongoFont</name>
    <fontformat>TTF</fontformat>
    <filename>00002.ttf</filename>
    <style>PLAIN</style>
  </font>
</fontdirectory>

こう定義すると、プログラムから呼び出す時は、以下のようになります
oUseFont= oUseFontF.createFont("NihongoFont", java.awt.Font.PLAIN, 36);

○情報

・機器毎に読み込めるフォントファイルが異なる
 みかちゃんフォントTTF版は、PS3では読み込めるが、DMR-BW800(BDレコーダー)では読み込めない
 みかちゃんフォントOTF版は、DMR-BW800では読み込めるが、PS3で読み込もうとするとフリーズする
・読み込めない場合に、styleタグを BOLDにすると読み込める場合がある
 みかちゃんフォントOTF版を DMR-BW800で読み込ませるには BOLDにする必要があるようだ
・機器によっては、2つのフォントを同時に開くことができない
 DMR-BW800では、以下のように記述すると oUseFont2のみ有効になる
 oUseFont1= oUseFontF.createFont("Arial", java.awt.Font.BOLD,36);
 oUseFont2= oUseFontF.createFont("NewsGothicStd", java.awt.Font.BOLD,36);
 但し、同じフォントのサイズ違いは可能だった
 oUseFont1= oUseFontF.createFont("NewsGothicStd", java.awt.Font.BOLD, 36);
 oUseFont2= oUseFontF.createFont("NewsGothicStd", java.awt.Font.BOLD, 24);


TOPプログラマ専用BD-J