fixing issue with "ёЁ";

pull/3265/head
Dinar Ahmatnurov 11 years ago
parent e9f7c4aeba
commit de6edcc48a
  1. 23
      modules/core/src/drawing.cpp

@ -1938,16 +1938,27 @@ static const int* getFontData(int fontFace)
return ascii; return ascii;
} }
inline void readCheck(int &c, int &i, const string &text, const int rightBoundary) inline void readCheck(int &c, int &i, const string &text)
{ {
int leftBoundary = ' ', rightBoundary = 127;
if(c >= 0x80) if(c >= 0x80)
{ {
if(c >= 0xC0 && c <= 0xDF) //2 bytes utf if(c >= 0xC0 && c <= 0xDF) //2 bytes utf
{ {
if(c & 1) if(c & 1)
{
c = (uchar)text[++i] + 47; c = (uchar)text[++i] + 47;
leftBoundary = 175;
rightBoundary = 191;
}
else else
{
c = (uchar)text[++i] - 17; c = (uchar)text[++i] - 17;
leftBoundary = 127;
rightBoundary = 175;
}
} }
else else
{ {
@ -1969,7 +1980,7 @@ inline void readCheck(int &c, int &i, const string &text, const int rightBoundar
} }
} }
if(c >= rightBoundary || c < ' ') if(c >= rightBoundary || c < leftBoundary)
c = '?'; c = '?';
} }
@ -1998,14 +2009,12 @@ void putText( Mat& img, const string& text, Point org,
pts.reserve(1 << 10); pts.reserve(1 << 10);
const char **faces = cv::g_HersheyGlyphs; const char **faces = cv::g_HersheyGlyphs;
int rightBoundary = fontFace == FONT_HERSHEY_COMPLEX ? 191 : 127;
for( int i = 0; text[i] != '\0'; i++ ) for( int i = 0; text[i] != '\0'; i++ )
{ {
int c = (uchar)text[i]; int c = (uchar)text[i];
Point p; Point p;
readCheck(c, i, text, rightBoundary); readCheck(c, i, text);
const char* ptr = faces[ascii[(c-' ')+1]]; const char* ptr = faces[ascii[(c-' ')+1]];
p.x = (uchar)ptr[0] - 'R'; p.x = (uchar)ptr[0] - 'R';
@ -2047,14 +2056,12 @@ Size getTextSize( const string& text, int fontFace, double fontScale, int thickn
int cap_line = (ascii[0] >> 4) & 15; int cap_line = (ascii[0] >> 4) & 15;
size.height = cvRound((cap_line + base_line)*fontScale + (thickness+1)/2); size.height = cvRound((cap_line + base_line)*fontScale + (thickness+1)/2);
int rightBoundary = fontFace == FONT_HERSHEY_COMPLEX ? 191 : 127;
for( int i = 0; text[i] != '\0'; i++ ) for( int i = 0; text[i] != '\0'; i++ )
{ {
int c = (uchar)text[i]; int c = (uchar)text[i];
Point p; Point p;
readCheck(c, i, text, rightBoundary); readCheck(c, i, text);
const char* ptr = faces[ascii[(c-' ')+1]]; const char* ptr = faces[ascii[(c-' ')+1]];
p.x = (uchar)ptr[0] - 'R'; p.x = (uchar)ptr[0] - 'R';

Loading…
Cancel
Save