Как наложить 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 шт):
Вы перемудрили, 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 если вам нужно обработать группу пикселей - это супермедленный метод работы с изображениями. Вот здесь есть другие методы быстрой работы с картинками.
