我无法将由freetype创建的字形拼接在一起。使用freeimage可以完美地工作,但是我不想只包含一小部分庞大的库。
完整代码在github https://github.com/live627/Engine/blob/master/Engine/Engine/fontmanager.cpp#L171
上我分配了缓冲区
unsigned char * charmap = new unsigned char[m_width * m_height]();
我像这样使像素缓冲区模糊并获得访问冲突
void Font::StitchGlyph(const GlyphInfo g,
unsigned int px, unsigned int py, unsigned int total_width,
unsigned int max_height, unsigned char * charmap)
{
auto WIDTH = total_width, HEIGHT = max_height;
for (int y = 0; y < g.bh; y++)
{
for (int x = 0; x < g.bw; x++)
{
//if (x >= WIDTH || y >= HEIGHT)
// continue;
charmap[(py + y) * WIDTH + (px + x)] = g.img[y * g.bw + x];
}
}
}
答案 0 :(得分:0)
我会在代码中验证您的偏移量与字形的宽度和高度结合不超过分配的范围。所以检查
if (px + GlyphInfo.bw > m_width || py + GlyphInfo.bh > m_height)
// error
我的猜测是它来自哪里。