/*! * bmfCreate() * * Input: dir (directory holding pixa of character set) * size (4, 6, 8, ... , 20) * Return: bmf (holding the bitmap font and associated information) * * Notes: * (1) This first tries to read a pre-computed pixa file with the * 95 ascii chars in it. If the file is not found, it * creates the pixa from the raw image. It then generates all * associated data required to use the bmf. */ L_BMF * bmfCreate(const char *dir, l_int32 size) { L_BMF *bmf; PIXA *pixa; PROCNAME("bmfCreate"); if ((bmf = (L_BMF *)CALLOC(1, sizeof(L_BMF))) == NULL) return (L_BMF *)ERROR_PTR("bmf not made", procName, NULL); /* Look for the pixa */ pixa = pixaGetFont(dir, size, &bmf->baseline1, &bmf->baseline2, &bmf->baseline3); /* If not found, make it */ if (!pixa) { L_INFO("Generating pixa of bitmap fonts", procName); pixa = pixaGenerateFont(dir, size, &bmf->baseline1, &bmf->baseline2, &bmf->baseline3); if (!pixa) { bmfDestroy(&bmf); return (L_BMF *)ERROR_PTR("font pixa not made", procName, NULL); } } bmf->pixa = pixa; bmf->size = size; bmf->directory = stringNew(dir); bmfMakeAsciiTables(bmf); return bmf; }
/*! * bmfCreate() * * Input: dir (<optional> directory holding pixa of character set) * fontsize (4, 6, 8, ... , 20) * Return: bmf (holding the bitmap font and associated information) * * Notes: * (1) If @dir == null, this generates the font bitmaps from a * compiled string. * (2) Otherwise, this tries to read a pre-computed pixa file with the * 95 ascii chars in it. If the file is not found, it then * attempts to generate the pixa and associated baseline * data from a tiff image containing all the characters. If * that fails, it uses the compiled string. */ L_BMF * bmfCreate(const char *dir, l_int32 fontsize) { L_BMF *bmf; PIXA *pixa; PROCNAME("bmfCreate"); if (fontsize < 4 || fontsize > 20 || (fontsize % 2)) return (L_BMF *)ERROR_PTR("fontsize must be in {4, 6, ..., 20}", procName, NULL); if ((bmf = (L_BMF *)CALLOC(1, sizeof(L_BMF))) == NULL) return (L_BMF *)ERROR_PTR("bmf not made", procName, NULL); if (!dir) { /* Generate from a string */ L_INFO("Generating pixa of bitmap fonts from string\n", procName); pixa = pixaGenerateFontFromString(fontsize, &bmf->baseline1, &bmf->baseline2, &bmf->baseline3); } else { /* Look for the pixa in a directory */ L_INFO("Locating pixa of bitmap fonts in a file\n", procName); pixa = pixaGetFont(dir, fontsize, &bmf->baseline1, &bmf->baseline2, &bmf->baseline3); if (!pixa) { /* Not found; make it from a file */ L_INFO("Generating pixa of bitmap fonts from file\n", procName); pixa = pixaGenerateFontFromFile(dir, fontsize, &bmf->baseline1, &bmf->baseline2, &bmf->baseline3); if (!pixa) { /* Not made; make it from a string after all */ L_ERROR("Failed to make font; use string\n", procName); pixa = pixaGenerateFontFromString(fontsize, &bmf->baseline1, &bmf->baseline2, &bmf->baseline3); } } } if (!pixa) { bmfDestroy(&bmf); return (L_BMF *)ERROR_PTR("font pixa not made", procName, NULL); } bmf->pixa = pixa; bmf->size = fontsize; if (dir) bmf->directory = stringNew(dir); bmfMakeAsciiTables(bmf); return bmf; }