Создание "сэндвичевых" изображений - C#
Формулировка задачи:
Здравствуйте, прошу совета бывалых, возможно ли создание "сэндвичевых" картинок с наложением больше двух?
Итак, есть форма, в ней:
На форме лежит picturebox1, в нем
Мне нужно сверху на picturebox1 положить picturebox2 с прозрачным фоном и картинкой pic4
так, чтобы получилось (от нижнего слоя к верхнему) pic1-pic2-pic3-pic4
Дело в том, что при установке picturebox2.BackColor = Transparent, выдается не все изображение под картинкой (pic1+pic2+pic3), а только pic1
Соответственно, все изображения на picturebox1 закрываются фоном (pic1).
Можно ли как-нибудь решить или обойти это?
form1.BackgroundImage = pic1
picturebox1.BackgroundImage = pic2 picturebox1.Image = pic3
Решение задачи: «Создание "сэндвичевых" изображений»
textual
Листинг программы
private Image FullOverlayOfTwoImages(Bitmap background, Bitmap layer) { var bitData = background.LockBits( new Rectangle(0, 0, background.Width, background.Height), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb); var bitDataN = layer.LockBits( new Rectangle(0, 0, layer.Width, layer.Height), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb); var size = bitData.Stride*background.Height; var val = new byte[size]; var valN = new byte[size]; var h = bitData.Scan0; var hN = bitDataN.Scan0; Marshal.Copy(h, val, 0, size); Marshal.Copy(hN, valN, 0, size); for (var i = 0; i < size; i += 4) { if (valN[i+2] != 0 || valN[i+1] != 0 || valN[i] != 0) //условие замены. Если накладываемое изображение в данном месте не будет белым, то оно перекроет исходное. { val[i + 2] = valN[i + 2]; val[i + 1] = valN[i + 1]; val[i] = valN[i]; } } Marshal.Copy(val, 0, h, size); background.UnlockBits(bitData); layer.UnlockBits(bitDataN); return background; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д