В порядке важности:
Что-либо более усовершенствованное, чем это является обычно определенным для алгоритма или проблемно-ориентированным. В зависимости от которых областей Вы интересуетесь, в следующем мае также быть релевантными:
Понимание функционирует, также полезно (не помните то, что математический термин для той области), но если Вы знаете, как программировать Вас, вероятно, уже делают.
Моя точка быть: десятилетний должен знать, что достаточно математики в состоянии понять программирование. Нет действительно большого количества математики, требуемой для основного понимания вещей. Это - все о логике, действительно.
Кажется, эта функция делает то, что вы хотите. Его также можно легко изменить, чтобы при необходимости вернуть Bitmap. Вам также потребуется очистить все изображения, которые вам больше не нужны, и т. Д. Адаптировано из: http://www.jigar.net/howdoi/viewhtmlcontent98.aspx
using System.Drawing;
using System.Drawing.Drawing2D;
public Image RoundCorners(Image StartImage, int CornerRadius, Color BackgroundColor)
{
CornerRadius *= 2;
Bitmap RoundedImage = new Bitmap(StartImage.Width, StartImage.Height);
using(Graphics g = Graphics.FromImage(RoundedImage))
{
g.Clear(BackgroundColor);
g.SmoothingMode = SmoothingMode.AntiAlias;
Brush brush = new TextureBrush(StartImage);
GraphicsPath gp = new GraphicsPath();
gp.AddArc(0, 0, CornerRadius, CornerRadius, 180, 90);
gp.AddArc(0 + RoundedImage.Width - CornerRadius, 0, CornerRadius, CornerRadius, 270, 90);
gp.AddArc(0 + RoundedImage.Width - CornerRadius, 0 + RoundedImage.Height - CornerRadius, CornerRadius, CornerRadius, 0, 90);
gp.AddArc(0, 0 + RoundedImage.Height - CornerRadius, CornerRadius, CornerRadius, 90, 90);
g.FillPath(brush, gp);
return RoundedImage;
}
}
Image StartImage = Image.FromFile("YourImageFile.jpg");
Image RoundedImage = this.RoundCorners(StartImage, 25, Color.White);
//Use RoundedImage...
Самый простой способ - использовать масштабируемую маску с закругленными углами. Примените маску к изображению и экспортируйте новое изображение.
Здесь - статья CodeProject, посвященная именно этому.
Лучше всего использовать метод Graphics.SetClip (). Например:
public static Image OvalImage(Image img) {
Bitmap bmp = new Bitmap(img.Width, img.Height);
using (GraphicsPath gp = new GraphicsPath()) {
gp.AddEllipse(0, 0, img.Width, img.Height);
using (Graphics gr = Graphics.FromImage(bmp)) {
gr.SetClip(gp);
gr.DrawImage(img, Point.Empty);
}
}
return bmp;
}