日期:2014-05-18 浏览次数:21612 次
在控件的代码编辑器中找到构造函数。 在构造函数中调用窗体的 SetStyle。 ' Visual BasicSetStyle(ControlStyles.SupportsTransparentBackColor,True) // C#SetStyle(ControlStyles.SupportsTransparentBackColor,true);这将使控件能够支持透明背景色。 在步骤 1中添加的代码行下再添加下面的代码行。这将把控件的 BackColor 设置为 Transparent。 ' Visual BasicMe.BackColor = Color.Transparent // C#this.BackColor = Color.Transparent;注意,还可以通过使用Color.FromArgb方法创建半透明颜色。有关颜色的更多信息,请参见笔、画笔和颜色。
------解决方案--------------------
///// <summary>
///// 叠加PNG图片透明
///// </summary>
///// <param name="pic">需要透明的图片、保证图片上没有白色区域</param>
///// <param name="picBack">叠加下面的图片</param>
//private void Transparent(PictureBox pic, PictureBox picBack)
//{
// pic.Visible = false;
// // 生成一个与PictureBox一样大的缓冲区
// Bitmap buffer = new Bitmap(pic.Width, pic.Height);
// // 创建图形对象,绘图区域为刚刚生成的缓冲区
// Graphics g = Graphics.FromImage(buffer);
// // 背景上被PictureBox覆盖的区域区域。假定PictureBox覆盖在背景图之上
// Rectangle scrRect = new Rectangle(
// pic.Left - picBack.Left, // 截图区域的左上角X坐标
// pic.Top - picBack.Top, // 截图区域的左上角Y坐标
// pic.Width, // 截图区域的宽度
// pic.Height); // 截图区域的高度
// // 将背景上被PictureBox覆盖的那块区域截图下来,保存在缓冲区中
// g.DrawImage(picBack.Image, // 背景图
// 0, // 所截图片画在缓冲区中的左上角X坐标
// 0, // 所截图片画在缓冲区中的左上角Y坐标
// scrRect, // 需要截图的区域
// GraphicsUnit.Pixel); // 此参数表示本次调用传入的参数以像素为单位
// // 指定被当做透明色的颜色值,这里使用纯白。
// // MSDN中SetColorKey的低值和高值可不相同,但这里必须相同,否则报错。原因未知。
// ImageAttributes imageAttr = new ImageAttributes();
// imageAttr.SetColorKey(Color.FromArgb(255, 255, 255), Color.FromArgb(255, 255, 255));
// // 将PictureBox的Image拷贝到Bitmap中,指定的颜色当做透明色
// g.DrawImage(pic.Image, // 将PictureBox的图片绘制在缓冲区中
// new Rectangle(0, 0, pic.Width, pic.Height), // 绘制区域,将PictureBox的图片按比例缩放绘制在这个区域内
// 0, // 截图区域的左边坐标,PictureBox必须覆盖为背景图之上
// 0, // 截图区域的上边坐标
// pic.Width, // 截图区域的宽度
// pic.Height, // 截图区域的高度
// GraphicsUnit.Pixel, // 此参数表示本次调用传入的参数以像素为单位
// imageAttr); // 透明色
// pic.Image = buffer;
// pic.Visible = true;
//}