首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > WinCE >

【共享】WINCE系统Picturebox控件支持透明方法,该怎么处理

2012-04-08 
【共享】WINCE系统Picturebox控件支持透明方法在WINCE中标准的PictureBox控件是不支持透明的,无论是否设置了

【共享】WINCE系统Picturebox控件支持透明方法
在WINCE中标准的PictureBox控件是不支持透明的,无论是否设置了Transparent属性。

使用如下方法可达到透明的效果。
1. 首先将PictureBox的Visible属性置为false,避免在透明效果未完成时显示出来。
2. 申请一个临时的Bitmap,大小与PictureBox相同。
3. 将PictureBox盖住的背景截图到Bitmap中。
4. 再将PictureBox的Image复制到Bitmap中,需要使用ImageAttributes对象指定透明色。
5. 将PictureBox的Image指向Bitmap。
6. 将PictureBox的Visible属性置为true。

    此方法的缺点是需要先将PictureBox隐藏,等生成完图片再显示出来。这样就造成PictureBox与窗体不能同时显示,但将生成图片的方法放在窗体的Load事件中应可以解决这个问题。
    第2个缺点是,此方法不支持真正的透明,而是将图片中的某个颜色当做透明色来处理,例如:将纯白作为透明,则图片中白色的部分将显示背景上的图片。

 

C# code
        // WINCE PictureBox控件图片透明化        private void Transparent(PictureBox pic, PictureBox picBack)        {            // 生成一个与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;        }


[解决办法]
还是直接在窗体上透明显示,效果来的快一些
[解决办法]
我们的cpu频率较低,所以没有用到透明效果
[解决办法]
探讨

我们的cpu频率较低,所以没有用到透明效果

热点排行