2015-03-07 2 views
-1

SO я есть нарисованный круг:Как поместить изображение в нарисованный круг

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); 

И у меня есть изображение в своих ресурсов, Как я могу поместить изображение в круг.

ответ

-1

Измените размер изображения, который хотите поместить в круг, чтобы он вписывался в круг, а затем добавьте PictureBox в форму и добавьте изображение, которое вы хотите отобразить на PictureBox, установите его местоположение так, чтобы оно было размещено в центр вашего круга вот так:

EDIT: Просто добавьте 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); 
... 
+0

Ваш ответ не лучший способ, чтобы заполнить эллипс, используя ресурс изображения. Также в окне изображения будет отображаться изображение в прямоугольной форме. Проверьте мой ответ. – dbvega

+0

Он хотел, чтобы круг был белым, твой путь не достигает этого. Как бы вы это разрешили? Да, изображение будет в форме прямоугольника, поэтому я добавил, что он должен установить BackColor в Transparent. –

+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