@@ -67,6 +67,7 @@ class CV_EXPORTS_W FreeType2Impl CV_FINAL : public FreeType2
67
67
FreeType2Impl ();
68
68
~FreeType2Impl ();
69
69
void loadFontData (String fontFileName, int idx) CV_OVERRIDE;
70
+ void loadFontData (uchar* pBuf, size_t bufSize, int idx) CV_OVERRIDE;
70
71
void setSplitNumber ( int num ) CV_OVERRIDE;
71
72
void putText (
72
73
InputOutputArray img, const String& text, Point org,
@@ -181,16 +182,39 @@ FreeType2Impl::~FreeType2Impl()
181
182
void FreeType2Impl::loadFontData (String fontFileName, int idx)
182
183
{
183
184
CV_Assert ( idx >= 0 );
184
- if ( mIsFaceAvailable == true )
185
+ if ( mIsFaceAvailable == true )
185
186
{
186
- hb_font_destroy (mHb_font );
187
+ hb_font_destroy (mHb_font );
188
+ CV_Assert (!FT_Done_Face (mFace ));
189
+ }
190
+
191
+ mIsFaceAvailable = false ;
192
+ CV_Assert ( !FT_New_Face ( mLibrary , fontFileName.c_str (), static_cast <FT_Long>(idx), &mFace ) );
193
+
194
+ mHb_font = hb_ft_font_create (mFace , NULL );
195
+ if ( mHb_font == NULL )
196
+ {
197
+ CV_Assert (!FT_Done_Face (mFace ));
198
+ return ;
199
+ }
200
+ CV_Assert ( mHb_font != NULL );
201
+ mIsFaceAvailable = true ;
202
+ }
203
+
204
+ void FreeType2Impl::loadFontData (uchar* pBuf, size_t bufSize, int idx)
205
+ {
206
+ CV_Assert ( idx >= 0 );
207
+ if ( mIsFaceAvailable == true )
208
+ {
209
+ hb_font_destroy (mHb_font );
187
210
CV_Assert (!FT_Done_Face (mFace ));
188
211
}
189
212
190
213
mIsFaceAvailable = false ;
191
- CV_Assert ( !FT_New_Face ( mLibrary , fontFileName.c_str (), static_cast <FT_Long>(idx), &(mFace ) ) );
214
+ FT_Open_Args args{ FT_OPEN_MEMORY, (FT_Byte*)pBuf, static_cast <FT_Long>(bufSize), nullptr , nullptr , nullptr , 0 , nullptr };
215
+ CV_Assert ( !FT_Open_Face (mLibrary , &args, idx, &mFace ) );
192
216
193
- mHb_font = hb_ft_font_create (mFace , NULL );
217
+ mHb_font = hb_ft_font_create (mFace , NULL );
194
218
if ( mHb_font == NULL )
195
219
{
196
220
CV_Assert (!FT_Done_Face (mFace ));
0 commit comments