110,570
社区成员
发帖
与我相关
我的任务
分享
public class ImageView: Panel
{
// 缓冲数据图像
private Bitmap btp = null;
// 缓冲绘画对象
private Graphics grp = null;
// 自定义背景图像
private Bitmap _image = null;
public Bitmap Image
{
get { return _image; }
set { _image = value; }
}
// 背景图片显示矩形
private Rectangle _bgrct;
public Rectangle BgRect
{
get { return _bgrct; }
set { _bgrct = value; }
}
public ImageView()
{
btp = new Bitmap(this.Width, this.Height); // 初始化缓冲数据对象
grp = Graphics.FromImage(btp); // 初始化缓冲绘画对象
}
protected override void OnPaint(PaintEventArgs e)
{
grp.Clear(this.BackColor); // 清楚背景颜色
DrawImage(); // 绘画所有图层
e.Graphics.DrawImage(btp, new Point(0, 0)); // 重绘数据缓冲图像
}
/// <summary>
/// 绘画所有图层对象
/// </summary>
private void DrawImage()
{
if (this._image != null)
{
grp.DrawImage(this._image, this._bgrct);
//this._image.Save(@"D:\rct.png");
Console.WriteLine(this._bgrct.X + "," + this._bgrct.Y + "," + this._bgrct.Width + "," + this._bgrct.Height);
}
}
protected override void OnSizeChanged(EventArgs e)
{
// 面板宽和高不全为零,重新创建缓冲对象
if (this.Width != 0 || this.Height != 0)
{
btp = new Bitmap(this.Width, this.Height);
grp = Graphics.FromImage(btp);
base.OnSizeChanged(e);
}
}
protected override void OnPaintBackground(PaintEventArgs e)
{
// 重要是重写次函数,为空实现覆盖环境自带的背景绘画
}
}