【发布时间】:2015-05-29 22:06:10
【问题描述】:
我正在使用 LineBreakMeasurer 和 TextLayout 在图像上绘制一些文本,但由于某种原因,笔触只是在内部抚摸,而且不是很干净。 这是我正在谈论的一个例子: http://i.imgur.com/eHtTw4p.png
当我不把字母画在上面并增加笔画宽度时,它实际上会在里面变粗而不是在外面。
这是我的代码:
float y = 0.0f;
float wrappingWidth = img.getWidth() * 0.8f;
LineBreakMeasurer measurer = new LineBreakMeasurer(str.getIterator(), imageGraphics.getFontRenderContext());
while (measurer.getPosition() < sentence.length()) {
TextLayout layout = measurer.nextLayout(wrappingWidth);
y += layout.getAscent();
float x = ((wrappingWidth * 0.8f) - layout.getVisibleAdvance()) / 2f + (wrappingWidth * 0.2f);
AffineTransform transform = new AffineTransform();
transform.translate((double)x, (double)y);
Shape outline = layout.getOutline(transform);
imageGraphics.setColor(Color.black);
imageGraphics.setClip(outline);
imageGraphics.setStroke(new BasicStroke(5, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER));
imageGraphics.draw(outline);
imageGraphics.setColor(Color.white);
imageGraphics.setStroke(new BasicStroke());
layout.draw(imageGraphics, x, y);
y += layout.getDescent() + layout.getLeading();
}
我不确定我做错了什么。有人知道吗?
【问题讨论】:
-
你考虑过翻译
outline吗?outline将被绘制在与文本相同的位置?此外,您永远不会重置笔画,因此文本很可能是用相同的笔画绘制的...... -
关于未重置笔划位的信息很好。我最初正在重置它,但想看看如果我使用相同的笔划,两者是否会完美重叠。显然不是。但是,是的,当我重置笔画时,结果完全相同。我没有意识到有必要翻译大纲?笔画不应该从两边加宽吗?
-
我对@987654326@ 不太熟悉,但这对我来说似乎有点不寻常:
imageGraphics.setClip(outline);剪辑可能会遮挡笔触(填充在形状之外)。这也可能是RenderingHints问题。 -
我认为它会在笔画之前将其剪辑,因此不会遮挡它?我删除了剪裁,笔画现在实际上正在工作。只是质量真的很差。 i.imgur.com/ztSW7FS.png