Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用FT_Glyph_笔划边框后,FT_Glyph_To_位图因光栅溢出而失败_C++_C_Fonts_Freetype_Freetype2 - Fatal编程技术网

C++ 使用FT_Glyph_笔划边框后,FT_Glyph_To_位图因光栅溢出而失败

C++ 使用FT_Glyph_笔划边框后,FT_Glyph_To_位图因光栅溢出而失败,c++,c,fonts,freetype,freetype2,C++,C,Fonts,Freetype,Freetype2,我一直在尝试使用freetype2在文本周围获得笔划效果。我试图遵循FT\u Glyph\u StrokeBorder的一些示例用法,但是每当我调用FT\u Glyph\u to\u Bitmap(在笔划之后)时,返回错误代码光栅溢出(98)或数组太大(10)——这取决于字符(可能) 我找不到这些错误代码是什么意思,或者我需要做什么来修复它们 字形绘制--在FT\u字形到位图时失败(如果启用了笔划): void绘图图示符( FT_字形槽和字形槽, cimg_t&image, int-shiftX

我一直在尝试使用freetype2在文本周围获得笔划效果。我试图遵循
FT\u Glyph\u StrokeBorder
的一些示例用法,但是每当我调用
FT\u Glyph\u to\u Bitmap
(在笔划之后)时,返回错误代码
光栅溢出
(98)或
数组太大
(10)——这取决于字符(可能)

我找不到这些错误代码是什么意思,或者我需要做什么来修复它们

字形绘制--在
FT\u字形到位图时失败(如果启用了笔划):

void绘图图示符(
FT_字形槽和字形槽,
cimg_t&image,
int-shiftX,
内特·希夫蒂,
无符号字符fontColor[]=NULL,
FT_Stroker Stroker=nullptr,
无符号字符strokeColor[]=NULL
){
shiftY-=tfpos2int(glyphSlot->metrics.horiBearingY);
如果(冲程!=nullptr){
FT_字形字形;
FT_Get_字形(字形槽和字形);
如果(字形->格式!=FT\u字形\u格式\u轮廓){
puts(“不能笔划!”);//未打印
返回;
}
如果(FT_字形_笔划边框(&字形,笔划,假,真)!=0){
puts(“笔划失败!”;//未打印
返回;
}
if(FT_字形到位图(&Glyph,FT_渲染模式\u NORMAL,nullptr,true)!=0){
puts(“位图失败!”);//已打印
返回;
}
FT_BitmapGlyph BitmapGlyph=重新解释投射(glyph);
drawBitmap(位图字形->位图、图像、shiftX、shiftY、strokeColor);
FT_Done_字形(字形);
}
//没有笔划的绘图图示符效果很好
如果(FT_渲染_字形(字形槽,FT_渲染_模式_正常)!=0){
返回;
}
drawBitmap(glyphSlot->位图、图像、shiftX、shiftY、fontColor);
}
字形加载:

FT\u设置像素大小(面、0、高度文本);
FT_GlyphSlot GlyphSlot=面->字形;
int shiftX=leftTopX;
int-shiftY=0;
for(int numberSymbol=0;numberSymbol
编辑:

这看起来可能是freetype2中的一个bug

--这段代码在2.10.1上仍然不起作用(该错误显然在2.10中已经修复)

如果有人有任何想法,我会非常感激——我不知道如何调试这个

我正在使用这种(unicode)字体:

更新1: 在当前版本(2.10.1)中,错误代码为0x62,这意味着
光栅溢出

更新2:

文件说明:

添加笔划可能会产生更宽和更高的图示符,具体取决于用于笔划图示符的半径有多大。您可能需要手动调整水平和垂直前进量,以考虑此添加的大小

我环顾四周并假设这一定是指
FT\u Glyph
的高级属性。这是一个FT\u向量(宽度和高度),两者都是16.16的固定点数。因为我试图将边界设置为2像素,所以我尝试将它们都增加4(以提供一些松弛)

glyph->advance.x+=(4 advance.y+=(4)
glyph->advance.x += (4 << 16);
glyph->advance.y += (4 << 16);