求一个关于图片合成的代码 帮帮忙 现在这里有三张图 我现在想把这两张图合起来 合成这样 把第一张图片做片底 第二张图片放上面 然后第一张图片穿过第二张图片的白色部分显示出来 求代码 谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 /// <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,然后使用上面的第一种重载来叠加。 今天心情好,再增加一个带整体透明的效果。/// <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的透明度. dropdownlist的autopostback问题 [求助]数据集插入到数据库中表的问题!!! Windows应用程序 问题 今日感受,散分(分析好者50分相送) 不能这样写吗 如何获得文件信息? 一个窗体关闭另一个打开怎么做 怎么样使用位运算符 & 请大家给个例子. 局域网内服务器扫描的问题? 报错了:“未将对象引用设置到对象的实例”,怎么办呢? Access如何实现数据的导出导入? 求C#初学视频!
/// <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,然后使用上面的第一种重载来叠加。
/// <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的透明度.