现在这里有三张图  我现在想把这两张图合起来 合成这样 把第一张图片做片底  第二张图片放上面 然后第一张图片穿过第二张图片的白色部分显示出来 求代码 谢谢

解决方案 »

  1.   


    /// <summary>
    /// 在原图上叠加一张透明图。
    /// </summary>
    /// <param name="original">原图</param>
    /// <param name="overlay">叠加图。此图应为一张本身包含透明色的图,例如PNG或GIF。</param>
    /// <returns></returns>
    public static Image Overlay(Image original, Image overlay)
    {
        return Overlay(original, overlay, Color.Empty);
    }/// <summary>
    /// 在原图上叠加一张图片,透明色为<paramref name="colorKeyLocation"/>指定的像素点颜色。
    /// </summary>
    /// <param name="original">原图</param>
    /// <param name="overlay">叠加图</param>
    /// <param name="colorKeyLocation">透明色所在叠加图的位置,以像素点为单位。</param>
    /// <returns></returns>
    public static Image Overlay(Image original, Bitmap overlay, Point colorKeyLocation)
    {
        Color colorKey = overlay.GetPixel(colorKeyLocation.X, colorKeyLocation.Y);
        return Overlay(original, overlay, colorKey);
    }/// <summary>
    /// 在原图上叠加一张图片,透明色由<paramref name="colorKey"/>指定。
    /// </summary>
    /// <param name="original">原图</param>
    /// <param name="overlay">叠加图</param>
    /// <param name="colorKey">透明色</param>
    /// <returns></returns>
    public static Image Overlay(Image original, Image overlay, Color colorKey)
    {
        Image mixed = (Image)original.Clone();
                
        using (Graphics g = Graphics.FromImage(mixed))
        {
            ImageAttributes ia;        if (!colorKey.IsEmpty)
            {
                ia = new ImageAttributes();
                ia.SetColorKey(colorKey, colorKey);
            }
            else
                ia = null;        g.DrawImage(overlay,
                new Rectangle(0, 0, original.Width, original.Height),
                0, 0, overlay.Width, overlay.Height,
                GraphicsUnit.Pixel, ia);        if (ia != null)
                ia.Dispose();
        }    return mixed;
    }
    强烈建议你在PS里把第二张图做成透明的PNG,然后使用上面的第一种重载来叠加。
      

  2.   

    今天心情好,再增加一个带整体透明的效果。
    /// <summary>
    /// 在原图上叠加一张图片,透明色由<paramref name="colorKey"/>指定。
    /// </summary>
    /// <param name="original">原图</param>
    /// <param name="overlay">叠加图</param>
    /// <param name="colorKey">透明色</param>
    /// <param name="opacity">透明度</param>
    /// <returns></returns>
    public static Image Overlay(Image original, Image overlay, Color colorKey, float opacity)
    {
        Image mixed = (Image)original.Clone();    using (Graphics g = Graphics.FromImage(mixed))
        {
            ImageAttributes ia = new ImageAttributes();        float[][] matrixItems ={ 
                            new float[] {1, 0, 0, 0, 0},
                            new float[] {0, 1, 0, 0, 0},
                            new float[] {0, 0, 1, 0, 0},
                            new float[] {0, 0, 0, opacity, 0}, 
                            new float[] {0, 0, 0, 0, 1}};        ColorMatrix matrix = new ColorMatrix(matrixItems);
            ia.SetColorMatrix(matrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
                    
            if (!colorKey.IsEmpty)
            {
                ia.SetColorKey(colorKey, colorKey, ColorAdjustType.Bitmap);
            }        g.DrawImage(overlay,
                new Rectangle(0, 0, original.Width, original.Height),
                0, 0, overlay.Width, overlay.Height,
                GraphicsUnit.Pixel, ia);        if (ia != null)
                ia.Dispose();
        }    return mixed;
    }
    效果图如下,使用了0.7的透明度.