Я работаю над некоторыми преобразованиями изображений, используя ASP.NET/C#/GDI+.У меня есть метод, который выглядит следующим образом, чтобы сделать прямоугольное изображение круглым:
public static Image MakeRound(Image img)
{
Bitmap bmp = new Bitmap(img.Width, img.Height);
GraphicsPath gp = new GraphicsPath();
Graphics gr = Graphics.FromImage(bmp);
using (gp)
{
gp.AddEllipse(0, 0, img.Width, img.Height);
using (gr)
{
gr.SetClip(gp);
gr.DrawImage(img, Point.Empty);
}
}
return bmp;
}
Требуется квадратное изображение, а затем добавляется эллипс размером с изображение.Затем я использую SetClip, чтобы удалить все, что лежит за пределами пути и вернуть круглое изображение.Это работает как задумано.
Возвращенное изображение затем рисуется на другое (большее) изображение в определенной позиции, и полученное составное изображение сохраняется в виде файла.Реальным примером использования этого может быть добавление логотипа или водяного знака к существующему изображению.Вот некоторый код из этой операции:
// Get backdrop image from server
string backdropPath = Server.MapPath("/img/backdrop.jpg");
System.Drawing.Image backdrop = Bitmap.FromFile(backdropPath);
// Create a graphics object to work with
Graphics gra = Graphics.FromImage(backdrop);
gra.DrawImage(MakeRound(smallerImage), new Point(50,50));
// Save the new image
backdrop.Save(saveFilePath);
Единственная проблема состоит в том, что края наложенного / округленного / возвращенного изображения немного шероховаты.Я хотел бы сделать его края более плавными, чтобы он лучше сочетался с большим фоновым изображением, на которое он накладывается.
Какие параметры сглаживания я мог бы использовать?Считаете ли вы, что это сглаживание следует выполнять способом, описанным выше, или оно применяется, когда круглое изображение накладывается на более крупный фон?
Все указатели и подсказки приветствуются!