如何将图像放在绘制的圆圈中

时间:2015-03-07 22:33:18

标签: c#

所以我画了一个圆圈:

int playerwidth = 40; 
int playerheight = 40; 
int xPosp = 0;
int yPosp = 0;


System.Drawing.SolidBrush pen1 = new System.Drawing.SolidBrush(System.Drawing.Color.White);
e.Graphics.FillEllipse(pen1, xPosp, yPosp, playerwidth, playerheight);

我的资源中有一张图片,如何将图片放在圆圈中。

2 个答案:

答案 0 :(得分:0)

您需要搜索如何知道椭圆中最大的矩形(优化问题)。

private static void DrawInEllipse(Graphics g, Image img, Rectangle rect)
{
    //margin definition for rectangle image (2%)
    double marginX = rect.Width*0.02f;
    double marginY = rect.Height*0.02f;

    using (var bitmap = new Bitmap(img, rect.Size))
    using (var brush = new TextureBrush(bitmap))
    {
        //fill ellipse
        g.FillEllipse(Brushes.White, rect);

        //calculate image rectangle
        var w = rect.Width/Math.Sqrt(2d) - marginX;
        var h = rect.Height/Math.Sqrt(2d) - marginY;
        var x = (rect.Left + rect.Width/2d) - (w/2);
        var y = (rect.Top + rect.Height/2d) - (h/2);

        var imgRect = new RectangleF((float) x, (float) y, (float) w, (float) h);

        //daw image in rectangle
        g.FillRectangle(brush, imgRect);
    }
}

假设your_image是资源名称,请查看如何使用上述函数:

...
int playerwidth = 40;
int playerheight = 40;
int xPosp = 0;
int yPosp = 0;

var rect = new Rectangle(xPosp, yPosp, playerwidth, playerheight);
DrawInEllipse(e.Graphics, Resources.your_image, rect);
...

我希望它有所帮助。

Probe

答案 1 :(得分:-1)

调整要放置在圆圈中的图片以使其适合圆圈,然后在表单中添加PictureBox并将要显示的图片添加到PictureBox,设置它的位置,以便它放在你的圆圈的中心,如下所示:

编辑: 只需在表单中添加PictureBox并将其放在任何位置,此代码即可生效。

private static void DrawInEllipse(PictureBox picBox, Image img, Rectangle rect)
{
    picBox.Width = rect.Width - (int)(rect.Width*0.3f);
    picBox.Height = rect.Height - (int)(rect.Width * 0.3f);        

    picBox.Image = img;
    picBox.SizeMode = PictureBoxSizeMode.Zoom;
    picBox.BackColor = Color.Transparent;

    int picCenterX = (rect.Width - picBox.Width) / 2 + rect.Location.X;
    int picCenterY = (rect.Height - picBox.Height) / 2 + rect.Location.Y;

    picBox.Location = new System.Drawing.Point(picCenterX, picCenterY);
}

正如您所看到的,无论图像的大小取决于椭圆的高度和宽度,与dbvega的方法不同,其中图像的大小相同并且必须被裁剪以适合进入椭圆。 此外,使用PictureBox可以为您提供许多优势,例如为其分配事件,调整大小,移动事件等等。

用法:

...
int playerWidth = 40;
int playerHeight = 40;
int xPosp = 0;
int yPosp = 0;

SolidBrush pen1 = new SolidBrush(Color.White);
Rectangle rect = new Rectangle(xPosp, yPosp, playerWidth, playerHeight);
e.Graphics.FillEllipse(pen1, rect);

DrawInEllipse(pictureBox1, your_namespace.Properties.Resources.your_image, rect);
...