Создание "сэндвичевых" изображений - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, прошу совета бывалых, возможно ли создание "сэндвичевых" картинок с наложением больше двух? Итак, есть форма, в ней:
form1.BackgroundImage = pic1
На форме лежит picturebox1, в нем
picturebox1.BackgroundImage = pic2
picturebox1.Image = pic3
Мне нужно сверху на picturebox1 положить picturebox2 с прозрачным фоном и картинкой pic4 так, чтобы получилось (от нижнего слоя к верхнему) pic1-pic2-pic3-pic4 Дело в том, что при установке picturebox2.BackColor = Transparent, выдается не все изображение под картинкой (pic1+pic2+pic3), а только pic1 Соответственно, все изображения на picturebox1 закрываются фоном (pic1). Можно ли как-нибудь решить или обойти это?

Решение задачи: «Создание "сэндвичевых" изображений»

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;
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4 из 5
Похожие ответы