Клип изображение в определенной форме.NET

У меня есть страница в моем проекте MVC4, где пользователь может добавить логотип своей компании, используя элемент управления загрузкой файлов. Эти изображения / логотипы затем отображаются на карте в мобильном приложении. Нам нужно обрезать эти изображения, чтобы они могли выглядеть как флаг.

Нам нужно взять только часть изображения внутри рамки флага и оставить все остальное.

  1. Можно ли это сделать с помощью кода на C#?
  2. Если да, то как это можно сделать. Пожалуйста, помогите мне с некоторыми примерами кода и ссылками.
  3. Мне нужно показать рамку над загруженным изображением, чтобы пользователь мог настроить свое изображение в том кадре, каким он хочет быть в кадре.

Пожалуйста, предложите мне некоторые API и примеры кода.

Благодарю.

Обновление: на некоторых сайтах, когда мы загружаем изображение профиля, оно дает нам рамку сверху, и выбранное нами изображение можно перемещать, чтобы в него вошла нужная часть. Теперь, когда мы загружаем изображение нашего профиля, оно масштабируется до такого размера. Могу ли я сделать что-то подобное здесь? в приведенном выше кадре я могу задать форму флага, пользователь может переместить загруженное изображение, чтобы получить желаемую часть изображения в этом кадре. Это правильный подход? Как мы можем это сделать? Я рассмотрел некоторые примеры кода JQuery, но без помощи.

1 ответ

Вы можете использовать функцию SetClip с Region в качестве параметра:

https://msdn.microsoft.com/en-us/library/x1zb278e(v=vs.110).aspx

Таким образом, вам нужно создать объект Graphics из растрового изображения, установить клип в форме вашего флага, а затем нарисовать изображение на этом объекте Graphics. Это все.

  // Following code derives a cutout bitmap using a
  // scizzor path as a clipping region (like Paint would do)
  // Result bitmap has a minimal suitable size, pixels outside 
  // the clipping path will be white.

  public static Bitmap ApplyScizzors(Bitmap bmpSource, List<PointF> pScizzor)
    {
        GraphicsPath graphicsPath = new GraphicsPath();   // specified Graphicspath          
        graphicsPath.AddPolygon(pScizzor.ToArray());      // add the Polygon
        var rectCutout = graphicsPath.GetBounds();        // find rectangular range           
        Matrix m = new Matrix();
        m.Translate(-rectCutout.Left, -rectCutout.Top);   // translate clip to (0,0)
        graphicsPath.Transform(m);
        Bitmap bmpCutout = new Bitmap((int)(rectCutout.Width), (int)(rectCutout.Height));  // target
        Graphics graphicsCutout = Graphics.FromImage(bmpCutout);
        graphicsCutout.Clip = new Region(graphicsPath);
        graphicsCutout.DrawImage(bmpSource, (int)(-rectCutout.Left), (int)(-rectCutout.Top)); // draw
        graphicsPath.Dispose();
        graphicsCutout.Dispose();
        return bmpCutout;
    }
Другие вопросы по тегам