如何将字符串旋转90度?旋转代码无显示问题求助
解决字符串旋转90度后不显示的问题
我需要将字符串旋转90度,但当前代码执行后无内容显示,移除旋转代码后字符串正常显示。原代码如下:
Transform transform = g.getTransform(); g.rotateRadians(1.571f); //90 degree x = getX(); y = getY(); g.drawString("Title",x,y); g.setTransform(transform);
问题原因
图形上下文的旋转默认以**坐标系原点(通常为画布左上角)**为中心,直接执行旋转后,原绘制位置(x,y)会被旋转到可视区域之外,导致看不到字符串。
解决方案
调整变换顺序,先将坐标系平移到目标绘制位置,再执行旋转,最后根据旋转后的坐标系调整字符串的绘制坐标,确保内容出现在可视区域内。修改后的代码如下:
Transform transform = g.getTransform(); // 平移坐标系到目标绘制位置 g.translate(getX(), getY()); // 旋转90度(π/2弧度) g.rotateRadians(1.571f); // 获取字符串宽度,用于调整绘制坐标 FontMetrics metrics = g.getFontMetrics(); int stringWidth = metrics.stringWidth("Title"); // 旋转后坐标系方向改变,调整坐标让字符串从目标位置垂直显示 g.drawString("Title", -stringWidth, 0); // 恢复原始变换 g.setTransform(transform);
代码说明
translate(getX(), getY()):将坐标系原点移到目标绘制位置,让旋转围绕该点进行。rotateRadians(1.571f):执行90度旋转。- 调整
drawString的坐标为(-stringWidth, 0):因为旋转90度后,原字符串的宽度方向变为垂直方向,向左偏移字符串宽度,能让字符串从目标位置开始向上垂直显示,匹配预期效果。
内容的提问来源于stack exchange,提问作者Daniel Tsai
相关产品推荐
相关产品推荐

