日期:2014-05-18 浏览次数:20980 次
Bitmap bit = new Bitmap(pictureBox1.Width, pictureBox1.Height);
Graphics g = Graphics.FromImage(bit);
g.FillRectangle(new SolidBrush(Color.Red), 0, 0, pictureBox1.Width, pictureBox1.Height);
g.FillRectangle(new SolidBrush(Color.Transparent), 20, 20, 20, 20);//这块变透明
pictureBox1.Image = bit;
using (Graphics g = this.CreateGraphics()) {
using (SolidBrush sb = new SolidBrush(Color.Red)) {
g.FillRectangle(sb, 10, 10, 200, 200);
}
}
LPRECT rect = new LPRECT();
rect.left = 20;
rect.top = 20;
rect.right = 100;
rect.bottom = 100;
InvalidateRect(this.Handle,out rect, true);
------解决方案--------------------
其实你完全可以用 Region 的 Exclude 来代替。
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
using (Bitmap bitmap = new Bitmap(e.ClipRectangle.Width, e.ClipRectangle.Height))
{
using (Graphics g = Graphics.FromImage(bitmap))
using (Region region = new Region(e.ClipRectangle))
using (SolidBrush brush = new SolidBrush(Color.Red))
{
region.Exclude(new Rectangle(20, 20, 20, 20));
g.FillRegion(brush, region);
}
e.Graphics.DrawImage(bitmap, new Point(0, 0));
}
}
------解决方案--------------------
bitmap本身不支持透明。你所保存的东西,肯定不能是透明的。
------解决方案--------------------
Color.Transparent获取系统定义的颜色。这样做不能透明。
Bitmap bit = new Bitmap(pictureBox1.Width, pictureBox1.Height);
bit.MakeTransparent(Color.FromArgb(223, 7, 0));//(0,0,0)是RGB
Graphics g = Graphics.FromImage(bit);
//g.Clear(Color.Blue);
g.FillRectangle(new SolidBrush(Color.Red), 80, 0, pictureBox1.Width, pictureBox1.Height);
pictureBox1.Image = bit;
------解决方案--------------------
提供个思路 :
g.SetClip(Rectangle);
g.Clear(Color.Transparent);
------解决方案--------------------
起先new bitmap的时候 加一个PixelFormat.32Argb的格式
我想这样应该就没有问题了吧。