1

实际返回的数字Font.getNumGlyphs()代表什么?

文档。状态:

返回 this 中的字形数量FontFont此范围的字形代码从0getNumGlyphs() - 1

我认为它代表了 0 和返回Character.MAX_CODE_POINT的代码点的数量。但下面代码的输出表明并非如此。Font.canDisplay(codePoint)true

代码

注意:countGlyphs在这里,为 200 多种字体处理超过 100 万个代码点(方法)需要将近 30 秒。运行时请耐心等待。

import java.awt.*;
import java.util.Date;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;

class FontGlyphCheck {

    public static int countGlyphs(Font f) {
        int count = 0;
        for (int ii = 0; ii < Character.MAX_CODE_POINT; ii++) {
            if (f.canDisplay(ii)) {
                count++;
            }
        }
        return count;
    }

    public static void main(String[] args) {
        System.out.println(new Date());
        GraphicsEnvironment ge =
                GraphicsEnvironment.getLocalGraphicsEnvironment();
        String[] fontNameArray = ge.getAvailableFontFamilyNames();

        final String[] names = {"Name", "Number Glyphs", "Count Glyphs"};
        final Object[][] values =
                new Object[fontNameArray.length][names.length];
        for (int ii = 0; ii < fontNameArray.length; ii++) {
            Font f = new Font(fontNameArray[ii], Font.PLAIN, 16);
            values[ii][0] = fontNameArray[ii];
            values[ii][1] = new Integer(f.getNumGlyphs());
            values[ii][2] = new Integer(countGlyphs(f));
        }
        System.out.println(new Date());
        Runnable r = new Runnable() {

            @Override
            public void run() {
                JPanel gui = new JPanel(new BorderLayout());

                DefaultTableModel dtm = new DefaultTableModel(values, names) {

                    @Override
                    public Class<?> getColumnClass(int columnIndex) {
                        if (columnIndex == 0) {
                            return String.class;
                        }
                        return Integer.class;
                    }
                };

                JTable table = new JTable(dtm);
                table.setAutoCreateRowSorter(true);
                gui.add(new JScrollPane(table));

                JOptionPane.showMessageDialog(null, gui);
            }
        };
        // Swing GUIs should be created and updated on the EDT
        // http://docs.oracle.com/javase/tutorial/uiswing/concurrency
        SwingUtilities.invokeLater(r);
    }
}

输出

此输出来自基于 Windows 7 的 PC。出现在 GUI 表中的第一列被拖到最后一列(为了更好的列对齐),并且行按getNumGlyphs()值(输出的第一列)按升序排序。

16  33  MS Outlook
41  59  Marlett
46  64  MT Extra
116 131 Bookshelf Symbol 7
192 208 Symbol
204 256 Algerian
208 286 Castellar
211 228 Wingdings 3
220 237 Wingdings 2
226 243 Wingdings
227 243 Webdings
230 250 Elephant
231 190 MS Reference Specialty
232 282 Stencil
241 258 Onyx
242 254 Narkisim
242 254 Miriam
242 254 Levenim MT
242 254 Aharoni
242 261 Modern No. 20
242 261 Footlight MT Light
243 254 Miriam Fixed
243 254 FrankRuehl
243 254 David
243 260 Lucida Handwriting
243 260 Lucida Fax
243 260 Lucida Calligraphy
243 261 Rockwell Extra Bold
243 261 Rockwell
243 261 Palace Script MT
243 261 Gloucester MT Extra Condensed
243 261 Colonna MT
243 261 Centaur
243 261 Brush Script MT
243 261 Broadway
243 261 Bell MT
243 261 Arial Rounded MT Bold
244 256 Rod
244 261 Perpetua Titling MT
244 261 Matura MT Script Capitals
244 261 Imprint MT Shadow
244 261 Engravers MT
244 261 Blackadder ITC
244 261 Bernard MT Condensed
244 262 Poor Richard
244 265 Old English Text MT
244 267 Edwardian Script ITC
245 261 Chiller
245 261 Calisto MT
246 262 Freestyle Script
247 266 Pristina
248 257 Harrington
248 270 Jokerman
249 268 Forte
249 273 Goudy Stout
249 275 Kristen ITC
250 267 Vladimir Script
250 267 Rage Italic
250 267 Kunstler Script
250 267 Eras Medium ITC
250 267 Eras Light ITC
250 267 Eras Demi ITC
250 267 Eras Bold ITC
250 268 Perpetua
251 268 OCR A Extended
251 268 Bodoni MT
251 269 Viner Hand ITC
251 269 Tempus Sans ITC
251 269 Script MT Bold
251 269 Rockwell Condensed
251 269 French Script MT
251 269 Felix Titling
251 269 Curlz MT
251 269 Bradley Hand ITC
252 259 Wide Latin
252 260 Britannic Bold
252 261 Cooper Black
252 268 Bodoni MT Condensed
252 268 Bodoni MT Black
253 261 Copperplate Gothic Light
253 261 Copperplate Gothic Bold
253 268 Gigi
255 262 Parchment
255 262 Papyrus
258 260 Playbill
260 278 Maiandra GD
261 277 Snap ITC
261 277 Juice ITC
261 279 Bodoni MT Poster Compressed
269 261 Baskerville Old Face
269 274 Showcard Gothic
270 260 Vivaldi
270 260 Harlow Solid Italic
270 260 Bauhaus 93
270 261 Goudy Old Style
274 274 Ravie
275 279 Informal Roman
291 274 Magneto
295 315 Gill Sans Ultra Bold
296 315 Gill Sans MT Condensed
297 314 Tw Cen MT Condensed Extra Bold
297 314 Tw Cen MT Condensed
297 314 Tw Cen MT
297 314 Gill Sans Ultra Bold Condensed
297 315 Gill Sans MT Ext Condensed Bold
298 274 Agency FB
300 303 MV Boli
300 315 Gill Sans MT
308 321 Microsoft Tai Le
311 326 Plantagenet Cherokee
317 338 Lao UI
343 350 Microsoft New Tai Lue
350 358 Leelawadee
362 333 LilyUPC
362 333 KodchiangUPC
362 333 JasmineUPC
362 333 IrisUPC
362 333 FreesiaUPC
362 333 EucrosiaUPC
362 333 DilleniaUPC
362 333 CordiaUPC
362 333 Cordia New
362 333 BrowalliaUPC
362 333 Browallia New
362 333 AngsanaUPC
362 333 Angsana New
363 275 Berlin Sans FB
364 274 Berlin Sans FB Demi
381 274 Californian FB
385 274 High Tower Text
395 402 Gisha
397 274 Niagara Solid
397 274 Niagara Engraved
422 321 Vijaya
433 317 Latha
450 370 Estrangelo Edessa
459 326 Raavi
463 348 Kartika
473 484 Simplified Arabic
474 482 Simplified Arabic Fixed
490 402 DokChampa
518 507 Andalus
581 595 Trebuchet MS
587 602 Comic Sans MS
589 574 Traditional Arabic
592 339 Tunga
596 614 Georgia
633 337 Kalinga
634 382 DaunPenh
654 676 Haettenschweiler
660 677 Franklin Gothic Heavy
660 678 Franklin Gothic Book
663 672 Garamond
663 676 Arial Narrow
663 678 Franklin Gothic Medium Cond
663 678 Franklin Gothic Demi Cond
663 681 Franklin Gothic Demi
665 677 Franklin Gothic Medium
666 676 Mistral
666 677 Impact
666 688 Century Gothic
667 664 Lucida Console
669 690 Monotype Corsiva
669 691 Century Schoolbook
669 691 Bookman Old Style
669 691 Book Antiqua
670 406 MoolBoran
670 692 Century
674 680 Arial Black
675 391 Khmer UI
690 687 Segoe Print
706 358 Utsaah
706 358 Kokila
706 358 Aparajita
734 732 Sylfaen
796 724 Gentium Book Basic
796 724 Gentium Basic
816 333 Vrinda
826 352 Iskoola Pota
847 337 Shonar Bangla
864 353 Vani
865 879 Euphemia
872 348 Gautami
885 357 Mangal
951 794 Verdana
1014    1029    OpenSymbol
1028    902 Nyala
1043    709 Microsoft Uighur
1180    780 Candara
1193    1190    MS Reference Sans Serif
1201    780 Corbel
1204    779 Constantia
1326    613 Microsoft PhagsPa
1328    1083    Palatino Linotype
1376    1391    Lucida Sans Typewriter
1402    1415    Lucida Bright
1482    456 Microsoft Himalaya
1484    1286    Ebrima
1491    340 Shruti
1565    1553    Microsoft Yi Baiti
1779    1762    Lucida Sans Unicode
1824    420 Mongolian Baiti
1915    1876    DejaVu Sans Light
1940    627 Segoe Script
2261    989 Sakkal Majalla
2380    2139    Segoe UI Semibold
2380    2139    Segoe UI Light
2584    2307    Arimo
2731    2230    Consolas
2901    2668    Segoe UI
2929    2391    Lucida Sans
2962    1138    Arabic Typesetting
3077    2826    Microsoft Sans Serif
3248    2862    Courier New
3248    87256   Monospaced
3248    87256   DialogInput
3289    3257    DejaVu Sans Mono
3399    3357    DejaVu Serif Condensed
3399    3357    DejaVu Serif
3414    2905    Tahoma
3415    2817    Times New Roman
3415    87191   Serif
3417    2821    Arial
3417    87193   SansSerif
3417    87193   Dialog
3878    2176    Calibri
3983    2176    Calibri Light
3987    3752    Segoe UI Symbol
4517    902 Gabriola
5928    5636    DejaVu Sans Condensed
5928    5636    DejaVu Sans
6991    3240    Cambria
6991    4362    Cambria Math
12747   12639   Malgun Gothic
19321   16059   MS PMincho
19321   16059   MS Mincho
22134   22202   DFKai-SB
22213   16059   MS UI Gothic
22213   16059   MS PGothic
22213   16059   MS Gothic
23942   16946   Meiryo UI
23942   16946   Meiryo
28562   28542   SimHei
28562   28542   KaiTi
28562   28542   FangSong
28762   28735   SimSun
28762   28735   NSimSun
29220   28977   Microsoft JhengHei
29354   29095   Microsoft YaHei
34046   28991   PMingLiU
34046   28991   MingLiU
34046   33877   MingLiU_HKSCS
39680   20626   GungsuhChe
39680   20626   Gungsuh
39680   20626   BatangChe
39680   20626   Batang
40194   20626   GulimChe
40194   20626   Gulim
40194   20626   DotumChe
40194   20626   Dotum
42809   42827   SimSun-ExtB
44875   42953   PMingLiU-ExtB
44875   42953   MingLiU-ExtB
44875   42953   MingLiU_HKSCS-ExtB
50377   38933   Arial Unicode MS
  1. 如果Font其中有两个值相同的,我还没有注意到它。
  2. 虽然大多数计数都很接近(在canDisplay方法返回值的 10% 以内),但有些却大不相同。
4

1 回答 1

1

<face-palm /> 就在文档的顶部。为Font..

字符和字形

字符是以抽象的方式表示字母、数字或标点符号等项目的符号。例如,'g',拉丁小写字母 G,是一个字符。

字形是用于呈现字符或字符序列的形状。在简单的书写系统中,例如拉丁语,通常一个字形代表一个字符。然而,一般来说,字符和字形没有一一对应的关系。例如,字符 'á' 带有 ACUTE 的拉丁小写字母 A 可以用两个字形表示:一个代表“a”,一个代表“´”。另一方面,两个字符的字符串“fi”可以用一个字形表示,一个“fi”连字。在复杂的书写系统中,例如阿拉伯语或南亚和东南亚书写系统,字符和字形之间的关系可能更加复杂,并且涉及与上下文相关的字形选择以及字形重新排序。字体封装了渲染一组选定字符所需的字形集合以及将字符序列映射到相应字形序列所需的表。

嗯,你每天都会学到新东西。那是我的“当日学习项目”。

于 2013-10-19T18:23:16.273 回答