Leptonica 1.68
C Image Processing Library

textops.c File Reference

Simple utility to put text on images. More...

#include <string.h>
#include "allheaders.h"

Go to the source code of this file.

Functions

static l_int32 stringAllWhitespace (char *textstr, l_int32 *pval)
static l_int32 stringLeadingWhitespace (char *textstr, l_int32 *pval)
PIXpixAddSingleTextblock (PIX *pixs, L_BMF *bmf, const char *textstr, l_uint32 val, l_int32 location, l_int32 *poverflow)
l_int32 pixSetTextblock (PIX *pixs, L_BMF *bmf, const char *textstr, l_uint32 val, l_int32 x0, l_int32 y0, l_int32 wtext, l_int32 firstindent, l_int32 *poverflow)
l_int32 pixSetTextline (PIX *pixs, L_BMF *bmf, const char *textstr, l_uint32 val, l_int32 x0, l_int32 y0, l_int32 *pwidth, l_int32 *poverflow)
SARRAYbmfGetLineStrings (L_BMF *bmf, const char *textstr, l_int32 maxw, l_int32 firstindent, l_int32 *ph)
NUMAbmfGetWordWidths (L_BMF *bmf, const char *textstr, SARRAY *sa)
l_int32 bmfGetStringWidth (L_BMF *bmf, const char *textstr, l_int32 *pw)
SARRAYsplitStringToParagraphs (char *textstr, l_int32 splitflag)

Detailed Description

Simple utility to put text on images.

  Font layout
     PIX             *pixAddSingleTextblock()
     l_int32          pixSetTextblock()
     l_int32          pixSetTextline()

  Text size estimation and partitioning
     SARRAY          *bmfGetLineStrings()
     NUMA            *bmfGetWordWidths()
     l_int32          bmfGetStringWidth()

  Text splitting
     SARRAY          *splitStringToParagraphs()
     static l_int32   stringAllWhitespace() 
     static l_int32   stringLeadingWhitespace() 

  This is a simple utility to put text on images.  One font and style
  is provided, with a variety of pt sizes.  For example, to put a
  line of green 10 pt text on an image, with the beginning baseline
  at (50, 50):
      L_Bmf  *bmf = bmfCreate("./fonts", 10);
      const char *textstr = "This is a funny cat";
      pixSetTextline(pixs, bmf, textstr, 0x00ff0000, 50, 50, NULL, NULL);

  A simpler interface for adding text to an image is pixAddTextblock().
  See prog/writetext_reg.c for examples of its use.

Definition in file textops.c.


Function Documentation

static l_int32 stringAllWhitespace ( char *  textstr,
l_int32 pval 
) [static]

stringAllWhitespace()

Input: textstring &val (<return> 1 if all whitespace; 0 otherwise) Return: 0 if OK, 1 on error

Definition at line 653 of file textops.c.

References ERROR_INT, and PROCNAME.

Referenced by splitStringToParagraphs().

static l_int32 stringLeadingWhitespace ( char *  textstr,
l_int32 pval 
) [static]

stringLeadingWhitespace()

Input: textstring &val (<return> 1 if leading char is ' ' or ''; 0 otherwise) Return: 0 if OK, 1 on error

Definition at line 685 of file textops.c.

References ERROR_INT, and PROCNAME.

Referenced by splitStringToParagraphs().

PIX* pixAddSingleTextblock ( PIX pixs,
L_BMF bmf,
const char *  textstr,
l_uint32  val,
l_int32  location,
l_int32 poverflow 
)

pixAddSingleTextblock()

Input: pixs (input pix; colormap ok) bmf (bitmap font data) textstr (<optional> text string to be added) val (color to set the text) location (L_ADD_ABOVE, L_ADD_AT_TOP, L_ADD_AT_BOTTOM, L_ADD_BELOW) &overflow (<optional return>=""> 1 if text overflows allocated region and is clipped; 0 otherwise) Return: pixd (new pix with rendered text), or null on error

Notes: (1) This function paints a set of lines of text over an image. If is L_ADD_ABOVE or L_ADD_BELOW, the pix size is expanded with a border and rendered over the border. (2) is the pixel value to be painted through the font mask. It should be chosen to agree with the depth of pixs. If it is out of bounds, an intermediate value is chosen. For RGB, use hex notation: 0xRRGGBB00, where RR is the hex representation of the red intensity, etc. (3) If textstr == NULL, use the text field in the pix. (4) If there is a colormap, this does the best it can to use the requested color, or something similar to it. (5) Typical usage is for labelling a pix with some text data.

Definition at line 85 of file textops.c.

References L_Bmf::baselinetab, bmfGetLineStrings(), composeRGBPixel(), ERROR_PTR, extractRGBValues(), L_ADD_ABOVE, L_ADD_AT_BOTTOM, L_ADD_AT_TOP, L_ADD_BELOW, L_BRING_IN_WHITE, L_ERROR, L_Bmf::lineheight, NULL, PIX_SRC, pixcmapAddNearestColor(), pixcmapCopy(), pixcmapGetColor(), pixCopy(), pixCreate(), pixGetColormap(), pixGetDimensions(), pixGetText(), pixRasterop(), pixSetBlackOrWhite(), pixSetColormap(), pixSetTextline(), PROCNAME, sarrayDestroy(), sarrayGetCount(), sarrayGetString(), and L_Bmf::vertlinesep.

Referenced by AddTextAndSave(), AddTransformsRGB(), AddTransformsYUV(), fpixaDisplayQuadtree(), main(), and pixSaveTiledWithText().

l_int32 pixSetTextblock ( PIX pixs,
L_BMF bmf,
const char *  textstr,
l_uint32  val,
l_int32  x0,
l_int32  y0,
l_int32  wtext,
l_int32  firstindent,
l_int32 poverflow 
)

pixSetTextblock()

Input: pixs (input image) bmf (bitmap font data) textstr (block text string to be set) val (color to set the text) x0 (left edge for each line of text) y0 (baseline location for the first text line) wtext (max width of each line of generated text) firstindent (indentation of first line, in x-widths) &overflow (<optional return>=""> 0 if text is contained in input pix; 1 if it is clipped) Return: 0 if OK, 1 on error

Notes: (1) This function paints a set of lines of text over an image. (2) is the pixel value to be painted through the font mask. It should be chosen to agree with the depth of pixs. If it is out of bounds, an intermediate value is chosen. For RGB, use hex notation: 0xRRGGBB00, where RR is the hex representation of the red intensity, etc. The last two hex digits are 00 (byte value 0), assigned to the A component. Note that, as usual, RGBA proceeds from left to right in the order from MSB to LSB (see pix.h for details). (3) If there is a colormap, this does the best it can to use the requested color, or something similar to it.

Definition at line 240 of file textops.c.

References bmfGetLineStrings(), bmfGetWidth(), ERROR_INT, L_WARNING, L_Bmf::lineheight, pixGetColormap(), pixGetDimensions(), pixSetTextline(), PROCNAME, sarrayDestroy(), sarrayGetCount(), sarrayGetString(), L_Bmf::vertlinesep, x0, and y0.

Referenced by main().

l_int32 pixSetTextline ( PIX pixs,
L_BMF bmf,
const char *  textstr,
l_uint32  val,
l_int32  x0,
l_int32  y0,
l_int32 pwidth,
l_int32 poverflow 
)

pixSetTextline()

Input: pixs (input image) bmf (bitmap font data) textstr (text string to be set on the line) val (color to set the text) x0 (left edge for first char) y0 (baseline location for all text on line) &width (<optional return>=""> width of generated text) &overflow (<optional return>=""> 0 if text is contained in input pix; 1 if it is clipped) Return: 0 if OK, 1 on error

Notes: (1) This function paints a line of text over an image. (2) is the pixel value to be painted through the font mask. It should be chosen to agree with the depth of pixs. If it is out of bounds, an intermediate value is chosen. For RGB, use hex notation: 0xRRGGBB00, where RR is the hex representation of the red intensity, etc. The last two hex digits are 00 (byte value 0), assigned to the A component. Note that, as usual, RGBA proceeds from left to right in the order from MSB to LSB (see pix.h for details). (3) If there is a colormap, this does the best it can to use the requested color, or something similar to it.

Definition at line 353 of file textops.c.

References bmfGetBaseline(), bmfGetPix(), composeRGBPixel(), ERROR_INT, extractRGBValues(), L_Bmf::kernwidth, L_WARNING, pixcmapAddNearestColor(), pixcmapGetColor(), pixDestroy(), pixGetColormap(), pixGetDepth(), pixGetWidth(), pixPaintThroughMask(), PROCNAME, and x0.

Referenced by main(), pixAddSingleTextblock(), and pixSetTextblock().

SARRAY* bmfGetLineStrings ( L_BMF bmf,
const char *  textstr,
l_int32  maxw,
l_int32  firstindent,
l_int32 ph 
)

bmfGetLineStrings()

Input: bmf textstr maxw (max width of a text line in pixels) firstindent (indentation of first line, in x-widths) &h (<return> height required to hold text bitmap) Return: sarray of text strings for each line, or null on error

Notes: (1) Divides the input text string into an array of text strings, each of which will fit within maxw bits of width.

Definition at line 445 of file textops.c.

References bmfGetWidth(), bmfGetWordWidths(), ERROR_PTR, L_Bmf::lineheight, NULL, numaDestroy(), numaGetCount(), numaGetIValue(), PROCNAME, sarrayAddString(), sarrayCreate(), sarrayCreateWordsFromString(), sarrayDestroy(), sarrayGetCount(), sarrayToStringRange(), L_Bmf::spacewidth, and L_Bmf::vertlinesep.

Referenced by pixAddSingleTextblock(), and pixSetTextblock().

NUMA* bmfGetWordWidths ( L_BMF bmf,
const char *  textstr,
SARRAY sa 
)

bmfGetWordWidths()

Input: bmf textstr sa (of individual words) Return: numa (of word lengths in pixels for the font represented by the bmf), or null on error

Definition at line 518 of file textops.c.

References bmfGetStringWidth(), ERROR_PTR, NULL, numaAddNumber(), numaCreate(), PROCNAME, sarrayGetCount(), and sarrayGetString().

Referenced by bmfGetLineStrings().

l_int32 bmfGetStringWidth ( L_BMF bmf,
const char *  textstr,
l_int32 pw 
)

bmfGetStringWidth()

Input: bmf textstr &w (<return> width of text string, in pixels for the font represented by the bmf) Return: 0 if OK, 1 on error

Definition at line 559 of file textops.c.

References bmfGetWidth(), ERROR_INT, L_Bmf::kernwidth, PROCNAME, and UNDEF.

Referenced by bmfGetWordWidths(), and main().

SARRAY* splitStringToParagraphs ( char *  textstr,
l_int32  splitflag 
)

splitStringToParagraphs()

Input: textstring splitting flag (see enum in bmf.h; valid values in {1,2,3}) Return: sarray (where each string is a paragraph of the input), or null on error.

Definition at line 603 of file textops.c.

References ERROR_PTR, NULL, PROCNAME, sarrayAddString(), sarrayCreate(), sarrayCreateLinesFromString(), sarrayDestroy(), sarrayGetCount(), sarrayGetString(), sarrayToString(), SPLIT_ON_BLANK_LINE, SPLIT_ON_BOTH, SPLIT_ON_LEADING_WHITE, stringAllWhitespace(), and stringLeadingWhitespace().

 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines