private void AutoGenbutton_Click(object sender, EventArgs e) {//フォントの自動生成. string mojiText = SearchChar.Text; mojiText = mojiText.Trim(); if (mojiText.Length <= 0) { return; } bool isItemFont = this.FontType.SelectedIndex == 0; bool isSquareFont = true; int font_width; Bitmap autogen = ImageUtil.AutoGenerateFont(mojiText, UseFontNameTextEdit.Font, isItemFont, isSquareFont, out font_width); if (autogen == null) { R.ShowStopError("フォントの自動生成に失敗しました。対応する日本語フォントがありません。"); return; } DialogResult dr = R.ShowQ("フォントを自動生成しました。\r\nROMに書き込みますか?\r\n\r\n「はい」ならば、ROMに書き込みます。\r\n「いいえ」ならば、画像ファイルとして保存します。\r\n"); if (dr == System.Windows.Forms.DialogResult.Yes) { //画像 this.SelectFontBitmapByte = ImageUtil.Image4ToByteZH(autogen, font_width); U.ForceUpdate(this.FontWidth, font_width); //画像等データの書き込み WriteButton.PerformClick(); //即検索 SearchButton.PerformClick(); } else if (dr == System.Windows.Forms.DialogResult.No) { if (this.FontType.SelectedIndex == 0) { //アイテム ImageFormRef.ExportImage(this, autogen, InputFormRef.MakeSaveImageFilename(this, "Item_" + mojiText), font_width); } else { //セリフ ImageFormRef.ExportImage(this, autogen, InputFormRef.MakeSaveImageFilename(this, "Serif_" + mojiText), font_width); } } }
void FontImporterOne(string one, bool isItemFont) { uint moji = U.ConvertMojiCharToUnit(one, this.MyselfPriorityCode); if (moji < 0x20 || moji == 0x80) {//制御文字なので無視 return; } uint topaddress_my; uint fontaddress_my; uint prevaddress_my; topaddress_my = FontForm.GetFontPointer(isItemFont); fontaddress_my = FontForm.FindFontData(topaddress_my , moji , out prevaddress_my , this.MyselfPriorityCode); if (fontaddress_my != U.NOT_FOUND) {//既存ROMに存在している return; } if (prevaddress_my == U.NOT_FOUND) {//このフォントはルールにより登録できない.日本語フォントで 0x100以下とか. return; } //既存ROMにはないフォント byte[] newFontData = null; if (this.YourROM != null) {//相手のROMにあるかどうか. uint your_moji = U.ConvertMojiCharToUnit(one, this.YourPriorityCode); if (your_moji < 0x20) {//制御文字なので無視 return; } //相手のROMにはあるかな? uint topaddress_your; uint fontaddress_your; uint prevaddress_your; topaddress_your = FontForm.GetFontPointer(isItemFont, this.YourROM); fontaddress_your = FontForm.FindFontData(topaddress_your , moji , out prevaddress_your , this.YourROM , this.YourPriorityCode); if (fontaddress_your == U.NOT_FOUND) {//相手のROMにもない newFontData = null; } else { Log.Notify("Font Porting", one); //fontデータの取得 newFontData = this.YourROM.getBinaryData(fontaddress_your, 8 * 64); FontForm.TransportFontStruct(newFontData, moji, this.MyselfPriorityCode, this.YourPriorityCode); } } if (newFontData == null && //存在しないフォントで this.UseAutoGenFont != null //自動生成する場合 ) { Log.Notify("Font Auto gen", one); //自動生成. int font_width; Bitmap autogen = ImageUtil.AutoGenerateFont(one , this.UseAutoGenFont , isItemFont , out font_width); if (autogen == null) {//ない return; } byte[] fontimage = ImageUtil.Image4ToByte(autogen); newFontData = FontForm.MakeNewFontData(moji , (uint)font_width , fontimage , Program.ROM , this.MyselfPriorityCode); } if (newFontData == null) {//存在しない return; } U.write_u32(newFontData, 0, 0); //NULL リストの末尾に追加するので. uint newaddr = InputFormRef.AppendBinaryData(newFontData, this.UndoData); if (newaddr == U.NOT_FOUND) {//エラー return; } //ひとつ前のフォントリストのポインタを、現在追加した最後尾にすげかえる. Program.ROM.write_u32(prevaddress_my + 0, U.toPointer(newaddr), this.UndoData); }