Как наложить PNG изображения с плавным переходом?

Сабж.
Есть фон.
введите сюда описание изображения
И есть картинка которою нужно разместить на фоне
введите сюда описание изображения Проблема с прозрачными краями.
Должно получится так (увеличил изображение что бы было понятно), это картинка с фотошопа.
введите сюда описание изображения
У меня получается вот так
введите сюда описание изображения

Код которым я склеиваю изображения.

        public static Bitmap Glue(Bitmap sourse, Bitmap img) 
        {
            Bitmap result = sourse;
            for (int w = 0; w< result.Width; w++)               
            {
                for (int h = 0; h < result.Height; h++) 
                {
                    Color pixelColor = img.GetPixel(w, h);

                    if(pixelColor.R != 0 && pixelColor.G != 0 && pixelColor.B != 0 || pixelColor.A != 0 ) 
                    {    
                            result.SetPixel(w, h, pixelColor);    
                    }
                }

            }
            return result;
        }   
    }

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


Ответы (1 шт):

Автор решения: aepot

Вы перемудрили, GDI+ (System.Drawing) уже всё умеет, что вам нужно.

using Image back = Image.FromFile("back.png");
using Image icon = Image.FromFile("image.png");
using Graphics g = Graphics.FromImage(back);
g.DrawImage(icon, Point.Empty); // наложить картинку на координатах (0, 0)
back.Save("result.png", ImageFormat.Png);

Где back.png - фон, image.png - иконка, result.png - готовое изображение.

введите сюда описание изображения

Вообще никогда не используйте GetPixel/SetPixel если вам нужно обработать группу пикселей - это супермедленный метод работы с изображениями. Вот здесь есть другие методы быстрой работы с картинками.

→ Ссылка