所以我画了一个圆圈:
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);
我的资源中有一张图片,如何将图片放在圆圈中。
答案 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);
...
我希望它有所帮助。
答案 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);
...