覆盖Picturbox OnPaint事件以旋转图像 - 创建自定义图片框

时间:2016-01-08 09:28:10

标签: c# .net picturebox system.drawing

我想创建一个自定义控件或覆盖pictuebox的onpaint事件,这样我就可以在图像框中绘制之前访问图像,这样我就可以旋转图像了。

我知道我可以做这样的事情

private void pictureBox1_Paint(object sender, PaintEventArgs e) {

    e.Graphics.DrawRectangle(Pens.Black, new Rectangle(10, 10, 20, 20));
}

如何访问图像以及如何创建自定义控件。

1 个答案:

答案 0 :(得分:3)

这是一个子类的快速示例:它隐藏了原始的Image属性,并将其替换为在分配之前进行旋转的属性:

class RotatedPictureBox : PictureBox
{

    private Image image;

    public new  Image Image {
        get { return image; }  // ?? you may want to undo the rotation here ??
        set {
              Bitmap bmp = value as Bitmap ;
              // use the rotation you need!
              if ( bmp != null )  bmp.RotateFlip(RotateFlipType.Rotate270FlipX);
              image = bmp;
              base.Image = Image;
            }
        }


    }
    public RotatedPictureBox ()
    {
    }
}

警告:分配图片似乎有效,但我没有针对所有可能的用途对其进行测试..已知限制

  • 它不会旋转通过ImageLocation分配的图像。
  • 我在Designer中分配图像时遇到了一次崩溃,但无法重现。