■95377 / inTopicNo.4) |
Re[1]: Win-10/Pro + C# + IPAmj明朝 |
□投稿者/ 魔界の仮面弁士 (2786回)-(2020/07/27(Mon) 09:49:06)
|
2020/07/27(Mon) 10:36:49 編集(投稿者)
■No95373 (S.Kos さん) に返信 > 人名に「ちょん切れた草冠」があり、これまではShift-JISの外字で対応していました。
[U+8279] 3画の草冠(┼┼) [U+5EFF] 3画の草冠(廿) [U+FA5D] 4画の草冠(┤├) [U+FA5E] 4画の草冠(┼ ┼)
> 書き出し文字に「ちょん切れた草冠」があると、ゴシック体の後にいわゆる豆腐が付与されます。
異体字セレクタ(IVS)ですよね。
人名利用ということで、Hanyo-Denshi コレクションの字形を挙げてみますが、たとえば [U+82E5]「若」の異体字の場合、 [U+82E5][U+E0101] で ┼┼ な草冠 (Hanyo-Denshi, JA2867) [U+82E5][U+E0102] で ┤├ な草冠 (Hanyo-Denshi, JTB949) [U+82E5][U+E0103] で ┼ ┼な草冠 (Hanyo-Denshi, JTB948)
が定義されています。この掲示板では Unicode 非対応なので、 実際の字形は下記の「登録済の異体字を検索」で確認してみてください。 https://747.github.io/vsselector/
※追記:その後の No95380 で「花」の異体字だと分かったので、 下記を見た方が直接的かも知れません。草冠以外の差異、 たとえば E0103 と E0106 の違い(七とヒ)も視認しやすい。 http://tool.mau2.com/ivs/ja/u/%E8%8A%B1
private void pictureBox1_Paint(object sender, PaintEventArgs e) { // GDI+ な Graphics.DrawString は、印刷にも使えるが異体字が文字化けする using (var f = new Font("IPAmj明朝", 24f)) { e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit; e.Graphics.DrawString("\u82E5\U000E0101", f, Brushes.Red, 10f, 10f); e.Graphics.DrawString("\u82E5\U000E0102", f, Brushes.Green, 10f, 70f); e.Graphics.DrawString("\u82E5\U000E0103", f, Brushes.Blue, 10f, 130f); } }
private void pictureBox2_Paint(object sender, PaintEventArgs e) { // GDI な TextRenderer.DrawText は異体字に対応しているが、印刷には使えない using (var f = new Font("IPAmj明朝", 24f)) { e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit; TextRenderer.DrawText(e.Graphics, "\u82E5\U000E0101", f, new Point(10, 10), Color.Red); TextRenderer.DrawText(e.Graphics, "\u82E5\U000E0102", f, new Point(10, 70), Color.Green); TextRenderer.DrawText(e.Graphics, "\u82E5\U000E0103", f, new Point(10, 130), Color.Blue); } }
private void button1_Click(object sender, RoutedEventArgs e) { var printDialog = new PrintDialog(); if (!printDialog.ShowDialog() ?? false) { return; }
// WPF なら異体字の印刷も可能 var textBlock = new TextBlock(); textBlock.FontFamily = new FontFamily("IPAmj明朝"); textBlock.FontSize = 24d; // textBlock.Text = "\u82E5\U000E0101\r\n\u82E5\U000E0102\r\n\u82E5\U000E0103"; Run r = new Run("\u82E5\U000E0101\r\n") { Foreground = new SolidColorBrush(Colors.Red) }; Run g = new Run("\u82E5\U000E0102\r\n") { Foreground = new SolidColorBrush(Colors.Green) }; Run b = new Run("\u82E5\U000E0103\r\n") { Foreground = new SolidColorBrush(Colors.Blue) }; textBlock.Inlines.AddRange(new Inline[] { r, g, b });
var canvas = new Canvas(); Canvas.SetTop(textBlock, 100); Canvas.SetLeft(textBlock, 100); canvas.Children.Add(textBlock);
var page = new FixedPage(); page.Children.Add(canvas);
var queue = printDialog.PrintQueue; var writer = PrintQueue.CreateXpsDocumentWriter(queue); writer.Write(page); }
|
|