也许是一个简单的问题,但我怎样才能画出以椭圆为中心的文字。 我知道我可以使用束带,但我不知道如何将它与Ellipse结合使用
我能找到的唯一方法是在一个回转中,但我需要将它放在一个圆/椭圆中。
我很快就会拥有这个,但它不会像我一样。
public void Draw(Graphics g)
{
g.DrawString(naam, font, brush, xypos);
g.DrawEllipse(blackPen, xpos, ypos, 100, 100);
}
这是我已经尝试过但不起作用的东西
答案 0 :(得分:0)
最近我一直在一个电子邮件客户端中工作,我想在其中显示一个“发件人”的名字,这就是我得到的:
为此,我遇到了一些问题:
这是我的解决方案:(评论用西班牙语,对此感到抱歉)
/// <summary>Dibuja un Circulo de Color con Texto Centrado que puede usarse como 'Logo' del Usuario.</summary>
/// <param name="PicSize">Tamaño (pixeles) de la Imagen a Retornar</param>
/// <param name="Brush">Color y Estilo del Circulo</param>
/// <param name="Texto">Texto a escribir dentro del Circulo</param>
/// <param name="Fuente">Fuente del Texto</param>
/// <param name="BackColor">Color del Fondo y del Texto</param>
/// <returns>Devuelve una Imagen con todos los elementos dibujados dentro.</returns>
public static System.Drawing.Image DrawUserCircle(System.Drawing.Size PicSize, System.Drawing.Brush Brush, string Texto, System.Drawing.Font Fuente, System.Drawing.Color BackColor)
{
//Imagen Virtual sobre la que se dibuja y se retorna al final:
System.Drawing.Image Canvas = new System.Drawing.Bitmap(PicSize.Width, PicSize.Height);
System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(Canvas);
//Tamaño del Circulo (rect):
System.Drawing.Rectangle outerRect = new System.Drawing.Rectangle(-1, -1, Canvas.Width + 1, Canvas.Height + 1);
System.Drawing.Rectangle rect = System.Drawing.Rectangle.Inflate(outerRect, -2, -2);
//Todas las opciones en Alta Calidad:
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBilinear;
g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
using (System.Drawing.Drawing2D.GraphicsPath path = new System.Drawing.Drawing2D.GraphicsPath())
{
//Fondo del Picture:
g.FillRectangle(new System.Drawing.SolidBrush(BackColor),
new System.Drawing.RectangleF(0, 0, PicSize.Width, PicSize.Height));
//Dibuja el Circulo:
path.AddEllipse(rect);
g.FillPath(Brush, path);
System.Drawing.SizeF stringSize = g.MeasureString(Texto, Fuente); //<- Obtiene el tamaño del Texto en pixeles
int posX = Convert.ToInt32((PicSize.Width - stringSize.Width) / 2); //<- Calcula la posicion para centrar el Texto
int posY = Convert.ToInt32((PicSize.Height - stringSize.Height) / 2);
// Dibuja el Texto:
g.DrawString(Texto, Fuente, new System.Drawing.SolidBrush(BackColor), new System.Drawing.Point(posX, posY));
}
return Canvas;
}
用法:
System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(
this.picUser.ClientRectangle, System.Drawing.Color.LightSkyBlue, System.Drawing.Color.DeepSkyBlue, 70);
using (System.Drawing.Font myFont = new System.Drawing.Font("Arial", 28, System.Drawing.FontStyle.Bold))
this.picUser.Image = DrawUserCircle(new System.Drawing.Size(64, 64), brush, "JC", myFont, System.Drawing.Color.White);
现在关于您如何绘制以圆圈为中心的文字的问题:
以上方法中完成的所有操作,希望对您有所帮助。 问候。