最近做一个控件,已经完成了图象的透明处理.
但是发现这个透明只是相对它的上一级透明,并非完全的透明.2个控件有叠加的部分,透明的区域居然能挡下面的控件.有没有做真是透明的方法呀.
但是发现这个透明只是相对它的上一级透明,并非完全的透明.2个控件有叠加的部分,透明的区域居然能挡下面的控件.有没有做真是透明的方法呀.
解决方案 »
- TcpClient怎样获得连接时间?
- C#中怎样创建数据库文件本进行管理?
- WinForm数据库编程,UI层生成BLL层
- 请问谁怎么怎么配置ASP.NET 中web.config 连接ORACLE数据库啊。
- .net winform里声明的public属性外部为何无法访问?
- (50分)高手请进.怎么实现在一个FORM中控制另一个FORM的控件,比如TIMER控件?
- C#中怎么接受Enter事件啊?
- C#控件中怎么挂接对象
- ====WEB报表打印:如何使潜入的DLL文件接受参数=====
- 寻CSharp的生成注释Web页的资料!
- 各位请进:100分求一段Delphi代码转C#代码!
- 我怎么在网页上无操作数据库
请按照以下步骤操作:
为透明控件制作一幅外观位图(.bmp)
扫描该位图的所有点,指定透明色(比如可以设定0,0点的颜色为透明色)
根据以上扫描的结果,返回一个region
将控件的外观重绘,把以上返回的region设为控件的region.
返回region的代码如下所示:
/// <summary>
/// 自定义方法_取得一个图片中非透明色部分的区域
/// </summary>
/// <param name="Picture">取其区域的图片</param>
/// <param name="TransparentColor">透明色</param>
/// <returns>图片中非透明色部分的区域</returns>
public static Region BmpRgn(Bitmap Picture)//, Color TransparentColor)
{
#region
int nWidth = Picture.Width;
int nHeight = Picture.Height;
Region rgn = new Region();
rgn.MakeEmpty();
bool isTransRgn;//前一个点是否在透明区
Color curColor;//当前点的颜色
Rectangle curRect = new Rectangle();
curRect.Height = 1;
int x = 0, y = 0;
Color TransparentColor = Picture.GetPixel(0, 0);
//逐像素扫描这个图片,找出非透明色部分区域并合并起来
for(y = 0; y < nHeight; ++y)
{
isTransRgn = true;
for (x = 0; x < nWidth; ++x)
{
curColor = Picture.GetPixel(x,y);
if(curColor == TransparentColor || x == nWidth - 1)//如果遇到透明色或行尾
{
if(isTransRgn == false)//退出有效区
{
curRect.Width = x - curRect.X;
rgn.Union(curRect);
}
}
else//非透明色
{
if(isTransRgn == true)//进入有效区
{
curRect.X = x;
curRect.Y = y;
}
}//if curColor
isTransRgn = curColor == TransparentColor;
}//for x
}//for y
return rgn;
#endregion
}