当前位置: 首页 > wzjs >正文

安庆哪些做网站的公司好网站会员方案

安庆哪些做网站的公司好,网站会员方案,如何写一份企业网站建设方案,做调查问卷赚钱注册网站1. 控件概述 这是一个继承自 Control 的自定义控件,主要用于图像的显示和交互操作,具有以下核心功能: 图像显示与缩放(支持鼠标滚轮缩放)图像平移(支持鼠标拖拽)视图重置(双击重置…

1. 控件概述

这是一个继承自 Control 的自定义控件,主要用于图像的显示和交互操作,具有以下核心功能:

  • 图像显示与缩放(支持鼠标滚轮缩放)
  • 图像平移(支持鼠标拖拽)
  • 视图重置(双击重置)
  • 网格背景显示

2. 核心功能实现分析

2.1 图像渲染与缩放
  • 使用 InterpolationMode.HighQualityBicubic 和 PixelOffsetMode.HighQuality 实现高质量图像渲染
  • 通过 _zoom 变量控制缩放比例,_imagePosition 控制图像位置
  • 坐标转换函数 ScreenToImage 用于将屏幕坐标映射到图像坐标
private PointF ScreenToImage(Point screenPoint)
{return new PointF((screenPoint.X - _imagePosition.X) / _zoom, (screenPoint.Y - _imagePosition.Y) / _zoom);
}
2.2 视图控制
  • ResetView() 方法自动计算适合控件大小的缩放比例
  • CenterImage() 方法确保图像居中显示
  • 实现鼠标事件处理:
    • 左键拖拽实现图像平移
    • 滚轮实现缩放(缩放时保持鼠标位置不变)
    • 双击重置视图
protected override void OnMouseWheel(MouseEventArgs e)
{// 缩放前记录鼠标在图像中的位置PointF mouseInImageSpace = ScreenToImage(e.Location);// 调整缩放比例_zoom += (e.Delta > 0 ? ZoomStep : -ZoomStep);_zoom = Math.Max(MinZoom, Math.Min(MaxZoom, _zoom));// 计算缩放后的位置并调整图像位置,确保鼠标点在图像中的相对位置不变PointF mouseInScreenSpaceAfterZoom = new PointF(mouseInImageSpace.X * _zoom + _imagePosition.X,mouseInImageSpace.Y * _zoom + _imagePosition.Y);_imagePosition.X += e.Location.X - mouseInScreenSpaceAfterZoom.X;_imagePosition.Y += e.Location.Y - mouseInScreenSpaceAfterZoom.Y;Invalidate();
}
2.3 网格背景实现
  • 通过 ShowGrid 属性控制网格显示
  • 在 OnPaint 方法中绘制网格背景
  • 网格参数可配置(颜色、大小)
// 绘制网格背景
if (_showGrid)
{using (Pen gridPen = new Pen(_gridColor)){// 水平线for (float y = 0; y < Height; y += GridSize){e.Graphics.DrawLine(gridPen, 0, y, Width, y);}// 垂直线for (float x = 0; x < Width; x += GridSize){e.Graphics.DrawLine(gridPen, x, 0, x, Height);}}
}

3. 使用示例 

// 在窗体中使用自定义控件
public partial class MainForm : Form
{private CustomControl1 imageControl;public MainForm(){InitializeComponent();// 创建自定义控件实例imageControl = new CustomControl1();imageControl.Dock = DockStyle.Fill;this.Controls.Add(imageControl);// 加载图像try{imageControl.Image = Image.FromFile("example.jpg");}catch (Exception ex){MessageBox.Show($"加载图像失败: {ex.Message}");}}
}

完整代码:

using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;namespace ImageControl
{public partial class CustomControl1 : Control{private Image _image;private Point _lastMousePosition;private PointF _imagePosition = new PointF(0, 0);private float _zoom = 1.0f;private const float MinZoom = 0.2f;private const float MaxZoom = 5.0f;private const float ZoomStep = 0.1f;private bool _showGrid = true;  // 新增:控制网格显示private readonly Color _gridColor = Color.LightGray;  // 新增:网格颜色private const int GridSize = 20;  // 新增:网格大小public Image Image{get => _image;set{if (_image != null && _image != value){_image.Dispose();}_image = value;// 自动调整初始缩放比例if (_image != null && this.Width > 0 && this.Height > 0){float widthRatio = (float)this.Width / _image.Width;float heightRatio = (float)this.Height / _image.Height;_zoom = Math.Min(widthRatio, heightRatio) * 0.95f;_zoom = Math.Max(MinZoom, Math.Min(MaxZoom, _zoom));}CenterImage();Invalidate();}}// 新增:网格显示属性public bool ShowGrid{get => _showGrid;set{if (_showGrid != value){_showGrid = value;Invalidate();}}}public CustomControl1(){this.DoubleBuffered = true;this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.UserPaint, true);}private PointF ScreenToImage(Point screenPoint){return new PointF((screenPoint.X - _imagePosition.X) / _zoom, (screenPoint.Y - _imagePosition.Y) / _zoom);}private RectangleF GetDestinationRectangle(){if (_image == null) return RectangleF.Empty;return new RectangleF(_imagePosition.X, _imagePosition.Y, (_image.Width * _zoom), (_image.Height * _zoom));}private void CenterImage(){if (_image == null) return;_imagePosition = new PointF((this.Width - _image.Width * _zoom) / 2,(this.Height - _image.Height * _zoom) / 2);Invalidate();}public void ResetView(){if (_image == null){_zoom = 1.0f;}else{// 计算适合控件大小的缩放比例float widthRatio = (float)this.Width / _image.Width;float heightRatio = (float)this.Height / _image.Height;_zoom = Math.Min(widthRatio, heightRatio) * 0.95f;_zoom = Math.Max(MinZoom, Math.Min(MaxZoom, _zoom));}CenterImage();}protected override void OnPaint(PaintEventArgs e){base.OnPaint(e);// 新增:绘制网格背景if (_showGrid){using (Pen gridPen = new Pen(_gridColor)){// 水平线for (float y = 0; y < Height; y += GridSize){e.Graphics.DrawLine(gridPen, 0, y, Width, y);}// 垂直线for (float x = 0; x < Width; x += GridSize){e.Graphics.DrawLine(gridPen, x, 0, x, Height);}}}if (_image == null) return;e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;e.Graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;RectangleF destRect = GetDestinationRectangle();e.Graphics.DrawImage(_image, destRect);}protected override void OnResize(EventArgs e){base.OnResize(e);CenterImage();}protected override void OnDoubleClick(EventArgs e){base.OnDoubleClick(e);ResetView();}protected override void OnMouseDown(MouseEventArgs e){base.OnMouseDown(e);if (e.Button == MouseButtons.Left && _image != null){_lastMousePosition = e.Location;this.Cursor = Cursors.Hand;}}protected override void OnMouseUp(MouseEventArgs e){base.OnMouseUp(e);this.Cursor = Cursors.Default;}protected override void OnMouseMove(MouseEventArgs e){base.OnMouseMove(e);if (e.Button == MouseButtons.Left && _image != null){_imagePosition.X += (e.X - _lastMousePosition.X);_imagePosition.Y += (e.Y - _lastMousePosition.Y);_lastMousePosition = e.Location;Invalidate();}}protected override void OnMouseWheel(MouseEventArgs e){base.OnMouseWheel(e);if (_image == null) return;PointF mouseInImageSpace = ScreenToImage(e.Location);float oldZoom = _zoom;_zoom += (e.Delta > 0 ? ZoomStep : -ZoomStep);_zoom = Math.Max(MinZoom, Math.Min(MaxZoom, _zoom));PointF mouseInScreenSpaceAfterZoom = new PointF(mouseInImageSpace.X * _zoom + _imagePosition.X,mouseInImageSpace.Y * _zoom + _imagePosition.Y);_imagePosition.X += e.Location.X - mouseInScreenSpaceAfterZoom.X;_imagePosition.Y += e.Location.Y - mouseInScreenSpaceAfterZoom.Y;Invalidate();}}}

http://www.dtcms.com/wzjs/795049.html

相关文章:

  • 岳溥庥网站建设用自家宽带做网站服务器
  • 怀化网站建设企业门店设计方案
  • 总部基地网站建设公司两个网站做的h5如何合在一起
  • win7 iis添加网站网站的主流趋势
  • 网站上传文件不大于5M定么做建设网站英语
  • 保定网站建设公司怎么用软件做原创视频网站
  • 烟台做外贸网站建设软文营销文章300字
  • 邢台网站招聘员工123网站开通flash
  • 辽宁响应式网站建设wordpress主题 四亩田
  • 大悟网站制作河北网站seo
  • 上海住远建设工程监理公司网站余姚关键词优化公司
  • 织梦网站被植入广告wordpress 批量产品尺码
  • 开发软件和做网站的区别钢丝网片每平米价格
  • 广州电力建设有限公司网站WordPress 页码固定
  • 做返利网站怎麼手机网站设计软件
  • 做著名建筑物网站简介衡阳网页设计
  • 商丘网站制作费用东莞网站建设快速排名
  • 跨境电商建站工具网站建设挣钱
  • 简历帮忙制作南京关键词seo公司
  • 做公司网站要提供什么网站开发源程序
  • 简述网站一般建设的流程图湖南做电商网站需要什么条件
  • 泽成seo网站排名wordpress apple4us
  • 创新的网站优秀建筑模型案例作品
  • 做视频网站 视频放在哪怎样电脑登录网站
  • 微信怎么做网站的动图做360网站官网还是百度知道
  • 洛阳霞光做网站的公司潍坊网站建设小程序制作
  • 产品少的电商网站怎么做动漫设计与制作主要学什么
  • 网站建设按什么合同交印花税百度的网站名
  • discuz网站ip那个网站做系统好
  • 网站用户引导重庆南川网站制作公司推荐