none
Graphics.DrawImage 画图 如何反复重新绘制? RRS feed

  • 问题

  • public int img
            {
            
                get
                {
                    return imgstyle;
                }
                set
                {
                    imgstyle=value;
                    imgPicBox psBox = new imgPicBox();
                    psBox.Location = new Point(10, 10);
                    psBox.Size = new Size(40, 40);
                    psBox.Image2Location = new Point(25, 25);
                    psBox.Image2size = new Size(15,15);
                    psBox.Image1 = avatar.Image;
                    if (imgstyle == 0) { psBox.Image2 = Properties.Resources.a; }
                    else if (imgstyle == 1) { psBox.Image2 = Properties.Resources.b; }
                    else if (imgstyle == 2) { psBox.Image2 = Properties.Resources.c; }
                    else if (imgstyle == 3) { psBox.Image2 = Properties.Resources.d; }
                    else if (imgstyle == 4) { psBox.Image2 = Properties.Resources.e; }
                    else if (imgstyle == 5) { psBox.Image2 = Properties.Resources.f; }
                    else { psBox.Image2 = null; }
                    avatar.Visible = false;
                    this.Controls.Add(psBox);
                    //psBox.Invalidate();
                    psBox.Refresh();
    
                }
            }
    
    
    
    
    public class imgPicBox : UserControl
            {
                public imgPicBox()
                {
                    this.Image2Opacity = 1f;
                    base.DoubleBuffered = true;
                }
    
                public Image Image1 { get; set; }
                public Image Image2 { get; set; }
                public Point Image2Location { get; set; }
                public float Image2Opacity { get; set; }
                public Size Image2size { get; set; }
    
                protected override void OnPaint(PaintEventArgs e)
                {
                    
                    if (Image1 != null)
                    {
                        e.Graphics.DrawImage(Image1,
                        new Rectangle(0,0,40,40),
                        new Rectangle(Point.Empty, Image1.Size),
                        GraphicsUnit.Pixel);
                    }
                        
    
                    if (Image2 != null)
                    {
                        
                        ImageAttributes attr = new ImageAttributes();
                        attr.SetColorMatrix(new ColorMatrix() { Matrix33 = Image2Opacity });
                        e.Graphics.DrawImage(Image2,
                            new Rectangle(Image2Location.X, Image2Location.Y, Image2size.Width, Image2size.Height),
                            0, 0, Image2size.Width, Image2size.Height,
                            GraphicsUnit.Pixel,
                            attr);
                    }
                }
            }

    尝试改变 img 的自定义值 的时候重新绘制图片  如何改变一次重新绘制一次?

    当img 值为0的时候 绘制一次  再次改变img的值为1的时候 重新绘制一张图  但是试过很多方法 只有第一次起作用 再修改丝毫不起作用????

    • 已编辑 ylzl 2016年9月12日 15:37
    2016年9月9日 10:37

答案

  • 好吧 自己解决了  把页面控件全部清除掉 再加回去就好了

    this.Controls.Clear();

    • 已标记为答案 ylzl 2016年9月13日 1:54
    2016年9月13日 1:54

全部回复

  • 很久了?

    psBox.Refresh() 使用过 不起作用   psBox.Invalidate();不起作用  psBox.Refresh(); 试过也不行

    都是第一次可以绘制  在改变就变不了了

    public void Invalidate(Rectangle, bool);

    Invalidate(Rectangle, bool);这个要怎么使用呢?

    2016年9月12日 15:42
  • 好吧 自己解决了  把页面控件全部清除掉 再加回去就好了

    this.Controls.Clear();

    • 已标记为答案 ylzl 2016年9月13日 1:54
    2016年9月13日 1:54