Hi, Thanks for your hint. I found the problem is cause by the bitmap_left is negative for character j, so I will have wrong index when copy the bitmap image to opencv.
Regards, Changlin 2014-03-06 15:14 GMT+08:00 昌霖 <[email protected]>: > Hi, > > Thanks for your hint. > I found the problem is cause by the bitmap_left is negative for > character j, so I will have wrong index when copy the bitmap image to > opencv. > > Regards, > Changlin > > > 2014-03-06 14:36 GMT+08:00 suzuki toshiya <[email protected]>: > > Hi, >> >> I could reproduce the problem by your testing code, >> but yet I'm not sure if this is FreeType2 problem. >> Because, >> >> 1) if I use "ftstring" included in freetype2-demos >> (you can use your own testing text, although the >> default text is "brown fox...".) >> >> 2) if I execute your program with bigger glyph size >> (e.g. height=128 etc), my impression on the "bug dot" >> at the lower-right corner of "j" is looking like a >> clipped overflow from the lower-left end of "j". >> If I look very carefully, the lower-left end of "j" >> is not connected smoothly, it seems as if there is >> a crack. >> >> Could you check more detail on the code copying >> the bitmap image from FreeType2 to OpenCV? >> >> # Yet I've not checked your code at all. >> >> Regards, >> mpsuzuki >> >> On 03/06/2014 03:03 PM, 昌霖 wrote: >> > Hi everyone, >> > >> > I am new for freetype library, and trying to following the tutorial >> to render text into opencv mat. >> > And I have some problem on non-monospace font face like Ubuntu >> Regular. >> > Following is my testing code and it can also be downloaded from my >> dropbox page. >> > https://www.dropbox.com/sh/qp93w5fzcu9hbcq/VSABZHiNV1 >> > That page include my testing code, render output, and test font face. >> > You can compile it by using the following command: >> > "g++ -o test_ubuntu_regular test_freetype.cpp `pkg-config opencv >> --cflags --libs` -I/usr/include/freetype2 -lfreetype" >> > "g++ -o test_ubuntu_regular_mono test_freetype.cpp `pkg-config >> opencv --cflags --libs` -I/usr/include/freetype2 -lfreetype -D_USE_MONO_" >> > I also try to use kerning to solve the problem but the delta vector >> always return (0,0). >> > >> > Thanks for yours kindly help. >> > Changlin >> > >> > >> ========================================================================================== >> > #include <string> >> > #include <iostream> >> > #include <opencv2/core/core.hpp> >> > #include <opencv2/imgproc/imgproc.hpp> >> > #include <opencv2/highgui/highgui.hpp> >> > #include <ft2build.h> >> > #include FT_FREETYPE_H >> > >> > using namespace std; >> > using namespace cv; >> > >> > int main(int arch, char* argv[]) >> > { >> > ///Setup test font, font size, and string >> > #ifndef _USE_MONO_ >> > string test_font = "Ubuntu-R.ttf"; >> > #else >> > string test_font = "UbuntuMono-R.ttf"; >> > #endif >> > string test_string = "jjj abcdefghijklmnopqrstuvwxyz jjj"; >> > int height = 32; >> > >> > FT_UInt status; >> > ///Initialize library >> > FT_Library library; >> > status = FT_Init_FreeType(&library); >> > if (status) >> > { >> > cout<<"Freetype library initialization failed"<<endl; >> > return 1; >> > } >> > ///Load font face >> > FT_Face face; >> > status = FT_New_Face(library, test_font.c_str(), 0, &face); >> > if (status) >> > { >> > cout<<"Freetype load font face failed"<<endl; >> > return 1; >> > } >> > ///Set font size >> > status = FT_Set_Pixel_Sizes(face, 0, height); >> > if (status) >> > { >> > cout<<"Freetype set size failed"<<endl; >> > return 1; >> > } >> > ///Render to text_image >> > Mat text_image; >> > int max_height=0; >> > FT_GlyphSlot slot=face->glyph; >> > for (size_t t=0; t<test_string.size(); t++) >> > { >> > ///Load and render character >> > status = FT_Load_Char(face, test_string[t], FT_LOAD_RENDER ); >> > if (status) >> > { >> > cout<<"Freetype load char \""<<test_string[t]<<"\" >> failed"<<endl; >> > continue; >> > } >> > ///Compute max height of character image for concat them >> > max_height = max(max_height, >> height-slot->bitmap_top+slot->bitmap.rows); >> > ///Create character image >> > Mat char_image=Mat::zeros(max_height, slot->advance.x/64, >> CV_8UC1); >> > for (int y=height-slot->bitmap_top, j=0; j<slot->bitmap.rows; >> y++, j++) >> > { >> > uchar* scanline = char_image.ptr<uchar>(y); >> > for (int x=slot->bitmap_left, i=0; i<slot->bitmap.width; >> x++, i++) >> > { >> > if (x>=char_image.cols) >> > { >> > continue; >> > } >> > scanline[x] |= >> slot->bitmap.buffer[j*slot->bitmap.pitch+i]; >> > } >> > } >> > ///Concat character image to text image >> > if (text_image.empty()) >> > { >> > text_image=char_image; >> > } >> > else >> > { >> > if (max_height>text_image.rows) >> > { >> > copyMakeBorder(text_image, text_image, 0, >> max_height-text_image.rows, 0, 0, BORDER_CONSTANT, Scalar(0)); >> > } >> > hconcat(text_image, char_image, text_image); >> > } >> > } >> > >> > #ifndef _USE_MONO_ >> > imwrite("ubuntu-regular.png", text_image); >> > #else >> > imwrite("ubuntu-regular-mono.png", text_image); >> > #endif >> > } >> > >> ============================================================================================== >> > >> > >> > _______________________________________________ >> > Freetype mailing list >> > [email protected] >> > https://lists.nongnu.org/mailman/listinfo/freetype >> > >> >> >
_______________________________________________ Freetype mailing list [email protected] https://lists.nongnu.org/mailman/listinfo/freetype
