@@ -67,7 +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
+ void loadFontData (char * pBuf, size_t bufSize, int idx) CV_OVERRIDE;
71
71
void setSplitNumber ( int num ) CV_OVERRIDE;
72
72
void putText (
73
73
InputOutputArray img, const String& text, Point org,
@@ -88,6 +88,8 @@ class CV_EXPORTS_W FreeType2Impl CV_FINAL : public FreeType2
88
88
int mCtoL ;
89
89
hb_font_t *mHb_font ;
90
90
91
+ void loadFontData (FT_Open_Args &args, int idx);
92
+
91
93
void putTextBitmapMono (
92
94
InputOutputArray img, const String& text, Point org,
93
95
int fontHeight, Scalar color,
@@ -181,27 +183,41 @@ FreeType2Impl::~FreeType2Impl()
181
183
182
184
void FreeType2Impl::loadFontData (String fontFileName, int idx)
183
185
{
184
- CV_Assert ( idx >= 0 );
185
- if ( mIsFaceAvailable == true )
186
+ FT_Open_Args args
186
187
{
187
- hb_font_destroy (mHb_font );
188
- CV_Assert (!FT_Done_Face (mFace ));
189
- }
188
+ FT_OPEN_PATHNAME,
189
+ nullptr , // memory_base
190
+ 0 , // memory_size
191
+ const_cast <FT_String*>(fontFileName.c_str ()),
192
+ nullptr , // stream
193
+ nullptr , // driver
194
+ 0 , // num_params
195
+ nullptr // params
196
+ };
190
197
191
- mIsFaceAvailable = false ;
192
- CV_Assert ( ! FT_New_Face ( mLibrary , fontFileName. c_str (), static_cast <FT_Long>(idx), & mFace ) );
198
+ this -> loadFontData (args, idx) ;
199
+ }
193
200
194
- mHb_font = hb_ft_font_create (mFace , NULL );
195
- if ( mHb_font == NULL )
201
+ void FreeType2Impl::loadFontData (char * pBuf, size_t bufSize, int idx)
202
+ {
203
+ CV_Assert ( pBuf != nullptr );
204
+
205
+ FT_Open_Args args
196
206
{
197
- CV_Assert (!FT_Done_Face (mFace ));
198
- return ;
199
- }
200
- CV_Assert ( mHb_font != NULL );
201
- mIsFaceAvailable = true ;
207
+ FT_OPEN_MEMORY,
208
+ reinterpret_cast <FT_Byte*>(pBuf),
209
+ static_cast <FT_Long>(bufSize),
210
+ nullptr , // pathname
211
+ nullptr , // stream
212
+ nullptr , // driver
213
+ 0 , // num_params
214
+ nullptr // params
215
+ };
216
+
217
+ this ->loadFontData (args, idx);
202
218
}
203
219
204
- void FreeType2Impl::loadFontData (uchar* pBuf, size_t bufSize , int idx)
220
+ void FreeType2Impl::loadFontData (FT_Open_Args &args , int idx)
205
221
{
206
222
CV_Assert ( idx >= 0 );
207
223
if ( mIsFaceAvailable == true )
@@ -211,7 +227,6 @@ void FreeType2Impl::loadFontData(uchar* pBuf, size_t bufSize, int idx)
211
227
}
212
228
213
229
mIsFaceAvailable = false ;
214
- FT_Open_Args args{ FT_OPEN_MEMORY, (FT_Byte*)pBuf, static_cast <FT_Long>(bufSize), nullptr , nullptr , nullptr , 0 , nullptr };
215
230
CV_Assert ( !FT_Open_Face (mLibrary , &args, idx, &mFace ) );
216
231
217
232
mHb_font = hb_ft_font_create (mFace , NULL );
0 commit comments