Как создать форму с изображением и текстурной маской? - PullRequest
0 голосов
/ 29 мая 2018

Как я могу применить FillRectangle с текстурой Brush к исходному изображению с помощью Texture Mask?

Как-то так ... но как использовать текстурную маску?

    Bitmap textile = new Bitmap("textile.png");
    TextureBrush textileBrush = new TextureBrush(textile);
    Bitmap outfit = new Bitmap("outfit.png");
    Bitmap masksource = new Bitmap("mask.png");

    Color bodyColorKey = Color.FromArgb(0, 255, 0);

    //what i should to do next and how to apply FillRectangle?
    using (Graphics g = Graphics.FromImage(outfit))
    {
        g.FillRectangle(textileBrush, new Rectangle(0, 0, ???, ???));
    }

Экипировка: enter image description here И его маска: enter image description here Текстильная текстура: enter image description here И как это должно выглядеть после, на выходе: enter image description here

Есть идеи, как должен выглядеть System.Drawing?

1 Ответ

0 голосов
/ 29 мая 2018

используя изображение маски, сделайте прозрачным для заданных цветов и объедините изображения следующим образом.

Bitmap textile = new Bitmap("textile.png");
        TextureBrush textileBrush = new TextureBrush(textile);
        Bitmap outfit = new Bitmap("outfit.png");
        Bitmap masksource = new Bitmap("mask.png");

        Bitmap transparentImage = new Bitmap(outfit.Width, outfit.Height);

        masksource.MakeTransparent(Color.FromArgb(255, 0, 255, 0));
        using (Graphics g = Graphics.FromImage(transparentImage))
        {
            g.DrawImage(outfit, new Point(0, 0));
            //g.DrawImage(textile, new Point(0, 0)); // use texture image
            g.FillRectangle(textileBrush, g.ClipBounds); // use texture image as Tile mode
            g.DrawImage(masksource, new Point(0, 0));
            transparentImage.MakeTransparent(Color.FromArgb(255, 255, 0, 0));
            transparentImage.MakeTransparent(Color.FromArgb(255, 0, 0, 255));
        }
        Bitmap outputImage = new Bitmap(outfit.Width, outfit.Height);
        using (Graphics g = Graphics.FromImage(outputImage))
        {
            g.DrawImage(outfit, new Point(0, 0));
            g.DrawImage(transparentImage, new Point(0, 0));
        }

Только вам нужно заполнить прямоугольник текстурой изображения

//what i should to do next and how to apply FillRectangle?
using (Graphics g = Graphics.FromImage(outfit))
{
    g.FillRectangle(textileBrush,g.ClipBounds);
}
...