Sometimes it's nice to be able to place text on an image and know precisely where it will render irrespective of the figure size and shape and other whims of the text() function. This submission achieves that by directly overwriting part of the image matrix with rasterized text generated using bitmapped fonts. It allows the use of any system font that text() will take. Text size, colour and position can also be controlled.
This code can undoubtedly be tweaked (or maybe just rewritten) to produce more aesthetically pleasing results. Feel free to build upon it!
Vincenzo: You have modified the function BitmapFont as suggested in Robert's comment below, which relies on an undocumented (and now retired) function. Return to the original code and all should be fine.
Smoothing would be entirely possible. I don't have an interest in adding it myself, but I think this is all you'd need to do:
- modify BitmapFont to store characters as uint8 instead of logical by removing line 68 and 69.
- create the output of RasterizeText as a uint8 by changing line 46, and replace the boolean logic in lines 72-74 with addition
- rewrite lines 92-96 assuming TextMask is an alpha map instead of a simple mask
Smoothed text with borders would be more of a challenge.
Warning: The undocumented 'hardcopy' function will be removed in a future release of MATLAB; use the documented 'print' command instead.
> In C:\Program Files\MATLAB\R2014b\toolbox\matlab\graphics\hardcopy.p>hardcopy at 39
In BitmapFont at 57
In Interfaccia_Ris>apriIM at 182
In Interfaccia_Ris>Interfaccia_Ris_OpeningFcn at 46
In gui_mainfcn at 220
In Interfaccia_Ris at 14
In Kernel_NEW_Montecarlo_ClassificazioneSar at 446
Error using inputcheck>LocalCheckOption (line 342)
Illegal option '-OpenGL' given.
Nice function, exactly what I was looking for! I had to add a drawnow after the call to text in BitmapFont.m to prevent the same letter being captured several times by getFrame. It would also be nice to remove the reliance on the padarray function and the image processing toolbox.
Is it possible with this script to create an outlined text?
27 Mar 2013
Wrote a demonstration script to produce the screenshot, which revealed a vertical clipping bug when using large fonts - this has been fixed. Also avoided some error conditions when requested position is almost or completely outside the image.
18 Apr 2013
Included drawnow call in BitmapFont and removed dependency on Image Processing Toolbox as suggested by B Treeby. Also added a separate version which adds a border to the text with custom colour and thickness.