Как создать изображение со скругленными углами в C#?

В порядке важности:

  • подсчет (необходимый для циклов)
  • Дополнение, вычитание, умножение, разделение.
  • Алгебра (только действительно требуемый понять использование переменных).
  • булева алгебра, булева логика и двоичный файл.
  • Экспоненты и логарифмы (т.е. понимают O (n) нотация).

Что-либо более усовершенствованное, чем это является обычно определенным для алгоритма или проблемно-ориентированным. В зависимости от которых областей Вы интересуетесь, в следующем мае также быть релевантными:

  • Линейная алгебра и тригонометрия (3D визуализация)
  • дискретная математика и теория множеств (проектирование баз данных, дизайн алгоритма, дизайн компилятора).
  • Статистика (хорошо, для статистических и/или научных/экономических приложений. возможно также полезный для дизайна алгоритма).
  • Физика (для моделирований).

Понимание функционирует, также полезно (не помните то, что математический термин для той области), но если Вы знаете, как программировать Вас, вероятно, уже делают.

Моя точка быть: десятилетний должен знать, что достаточно математики в состоянии понять программирование. Нет действительно большого количества математики, требуемой для основного понимания вещей. Это - все о логике, действительно.

8
задан cocoapriest 18 November 2009 в 20:16
поделиться

3 ответа

Кажется, эта функция делает то, что вы хотите. Его также можно легко изменить, чтобы при необходимости вернуть 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...
22
ответ дан 5 December 2019 в 04:55
поделиться

Самый простой способ - использовать масштабируемую маску с закругленными углами. Примените маску к изображению и экспортируйте новое изображение.

Здесь - статья CodeProject, посвященная именно этому.

5
ответ дан 5 December 2019 в 04:55
поделиться

Лучше всего использовать метод 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;
    }
7
ответ дан 5 December 2019 в 04:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: