E Ink display 購入したのは、組み込みコマンドを使用したテキストの表示をサポートしています。ドキュメントによると、漢字用に別の「フォントライブラリ」をロードすることもできます。
フォントライブラリ
システムに組み込まれている32、48、64ドットの英語フォントは、TFカードやNandFlashを使用しなくてもいつでも利用できます。ただし、32、48、および64ドットの中国語フォントの場合、使用する前に、相対ライブラリファイルをTFカードまたはNandFlashに保存する必要があります。
この表示用のGitHubライブラリでこれらのフォントファイルの1つのサンプルを見つけました: GBK32.FON 、 GBK48.FON および GBK64.FON 。
残念ながら、これは私が得た限りです。
file
は何も役に立ちません(_GBK32.FON: data
_)
FontForge エラーが発生します:GBK32.FON is not in a known format (or uses features of that format fontforge does not support, or is so badly corrupted as to be unreadable)
TrID 出力100.0% (.ABR) Adobe PhotoShop Brush (1002/3)
、しかしPhotoshopでファイルを開くことができませんでした
PSFTools 有効なWindows.FONまたは.FNTファイルとして認識しません
16進エディタは、マジックナンバーがないことを示しています-実際、3つのファイルすべての最初の15バイトはゼロです
ファイルのサイズに基づくと、ファイルはある種のビットマップであるように見えます(_GBK32.FON
_のサイズ/ 32 ^ 2 = _GBK48.FON
_のサイズ/ 48 ^ 2 = _GBK64.FON
_のサイズ/ 64 ^ 2)
この説明に合う可能性のある「既知の」ビットマップフォントはありますか?このフォーマットを理解するために他に何を試みることができますか?
私の良さ!私は助けを求めに行きましたが、助けを求めないようにというヒントボックスがポップアップしました...そう、3日後に私は自分でそれをしたので、いくつかの追加のヒントを共有したいと思いました。
ファイルをJavaにプルするのはとても簡単です。
グリフをインポートするには、(擬似コード)を使用します。
BufferedInputStream bf = new BufferedInputStream(importGBKFileStream);
byte glyphline[] = new byte[glyphBitWith/8]; // 64 for GBK 64
while (bf.available() > 0) {
bf.read(glyphline);
for(int i = 0 ; i < glyphline.length ; i++){
String s = ("0000000" + Integer.toBinaryString(0xFF & glyphline[i])).replaceAll(".*(.{8})$", "$1");
... etc
EPDにグリフを表示するには
遊んだ後、キャラクターごとに2バイトをEPDに送信する必要があります。これらの文字は、(上位バイト)0x81、(下位バイト)0x40から始まります。
これは良い参考資料です https://en.wikipedia.org/wiki/GBK GBKデータセットがどのように配置されているかを確認してください。もう1つの役立つリファレンスは次のとおりです https://r12a.github.io/apps/encodings/
カスタムフォントの作成(擬似コード)
.ttfファイルをダウンロードしてJavaで開きます
Font font = Font.createFont(Font.TRUETYPE_FONT, inttf);
font = font.deriveFont((float) 64);
// for all characters in ASCII table
text = Character.toString(chara);
img = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_BYTE_BINARY);
g2d = img.createGraphics();
g2d.setColor(Color.BLACK);
g2d.fillRect(0, 0, imageWidth, imageHeight);
g2d.setColor(Color.WHITE);
g2d.setFont(font);
fm = g2d.getFontMetrics();
// for all ascii values 0 - 256, xpos
g2d.drawString(text, 0, fm.getAscent());
// use the character and the derrived with from the FontMetrics to
// create a map for spacing the text manually
characterWidthLogger(chara, textWidth);
// should have the image as a dataByte buffer
WritableRaster raster = img.getRaster();
DataBufferByte data = (DataBufferByte) raster.getDataBuffer();
// output the data to a file or screen
displayByteArray(data ,imageHeight, imageWidth);
CharacterWidthLogger()は重要です。 EPDを制御するマイクロでは、characterWidthマップを使用して間隔をとして設定します。そのため、「テキスト」コマンドは4つの個別のコマンド((x0、y0、 "T")、(x0 + width'T "、y0" e ")など)になり、各文字は中国語形式に変換されます。 GBKファイル内のどこにグリフを配置するかはあなた次第です。epdはGBK32、GBK48、GBK64の3つのファイルのみを許可します。最初の上部0x81、下部0x80で中国語のグリップをコピーしました。したがって、ascii0x54であるTは次のようになります。 0x81、0xD4。
それが役に立てば幸い
ヘイデン