Сглаживание при срезании изображения с помощью GDI + в ASP.NET/C#? - PullRequest
1 голос
/ 31 января 2012

Я работаю над некоторыми преобразованиями изображений, используя 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);

Единственная проблема состоит в том, что края наложенного / округленного / возвращенного изображения немного шероховаты.Я хотел бы сделать его края более плавными, чтобы он лучше сочетался с большим фоновым изображением, на которое он накладывается.

Какие параметры сглаживания я мог бы использовать?Считаете ли вы, что это сглаживание следует выполнять способом, описанным выше, или оно применяется, когда круглое изображение накладывается на более крупный фон?

Все указатели и подсказки приветствуются!

Ответы [ 2 ]

1 голос
/ 31 января 2012

Техника, которую вы ищете, называется пером, т.е. перья с краями - это форма сглаживания, применяемая на краю нарисованного изображения.

Посмотрите на этот пост на мягких гранях в GDI + . Это может быть применимо к вашему сценарию.

0 голосов
/ 31 января 2012

Попробуйте установить SmoothingMode в HighQuality, http://msdn.microsoft.com/en-us/library/system.drawing.graphics.smoothingmode.aspx.

Также установите InterpolationMode в HighQualityBicubic, http://msdn.microsoft.com/en-us/library/system.drawing.drawing2d.interpolationmode.aspx.

...