最终效果图:
窗体上可以看到:添加了2个控件:内部一个pictureBox,命名为pbMain,外部一个panel,命名为panelContainer,右边添加了几个操作的按钮。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Threading; using System.IO; using System.Xml.Serialization; using DevComponents.DotNetBar; using System.Drawing.Printing; namespace ThreadingTest { public partial class PicView : Office2007Form { private Point pt; private const double step = 0.1; public PicView() { InitializeComponent(); pictureBox2.MouseWheel += new MouseEventHandler(pictureBox2_MouseWheel); pbMain.Image = Image.FromFile(@"D:\界面布局.bmp"); oldwith = pbMain.Width = pbMain.Image.Width; oldHeith = pbMain.Height = pbMain.Image.Height; oldPoint = pbMain.Location = new Point((panelContainer.Width - pbMain.Width) / 2, (panelContainer.Height - pbMain.Height) / 2); } /// <summary> /// 这个是封装dll的方法,直接改为类库,就可以调用了 /// </summary> /// <param name="path"></param> /// <param name="name"></param> public void SetPath(string path, string name) { pictureBox2.MouseWheel += new MouseEventHandler(pictureBox2_MouseWheel); this.Name = name; if (!File.Exists(path)) { return; } FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read); Image image = Image.FromStream(fs); fs.Close(); fs.Dispose(); pbMain.Image = image; oldwith = pbMain.Width = pbMain.Image.Width; oldHeith = pbMain.Height = pbMain.Image.Height; oldPoint = pbMain.Location = new Point((panelContainer.Width - pbMain.Width) / 2, (panelContainer.Height - pbMain.Height) / 2); } #region Event /// <summary> /// 放大 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnEnlarge_Click(object sender, EventArgs e) { try { pbMain.Width = pbMain.Width + int.Parse(Math.Ceiling(pbMain.Width * step).ToString()); pbMain.Height = pbMain.Height + int.Parse(Math.Ceiling(pbMain.Height * step).ToString()); pbMain.Location = new Point((panelContainer.Width - pbMain.Width) / 2, (panelContainer.Height - pbMain.Height) / 2); } catch { } } /// <summary> /// 缩小 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnReduce_Click(object sender, EventArgs e) { pbMain.Width = pbMain.Width - int.Parse(Math.Ceiling(pbMain.Width * step).ToString()); pbMain.Height = pbMain.Height - int.Parse(Math.Ceiling(pbMain.Height * step).ToString()); pbMain.Location = new Point((panelContainer.Width - pbMain.Width) / 2, (panelContainer.Height - pbMain.Height) / 2); } private void pbMain_MouseDown(object sender, MouseEventArgs e) { pt = Cursor.Position; pbMain.Cursor = Cursors.SizeAll; } private void pbMain_MouseUp(object sender, MouseEventArgs e) { pbMain.Cursor = Cursors.Default; } private void pbMain_MouseMove(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { int px = Cursor.Position.X - pt.X; int py = Cursor.Position.Y - pt.Y; pbMain.Location = new Point(pbMain.Location.X + px, pbMain.Location.Y + py); pt = Cursor.Position; } } /// <summary> /// 打印预览图片效果 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> Image image = null; private void btnPrint_Click(object sender, EventArgs e) { image = new Bitmap(this.panelContainer.Bounds.Width, this.panelContainer.Bounds.Height); Graphics gps = Graphics.FromImage(image); gps.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; gps.CopyFromScreen(this.panelContainer.PointToScreen(new Point(0, 0)).X, this.panelContainer.PointToScreen(new Point(0, 0)).Y, 0, 0, new Size(this.panelContainer.Bounds.Width, this.panelContainer.Bounds.Height)); ppd.Document = pdMain; System.Drawing.Printing.PageSettings df = new System.Drawing.Printing.PageSettings(); df.PaperSize = new PaperSize("new size", image.Width, image.Height); pdMain.DefaultPageSettings = df; ppd.PrintPreviewControl.Zoom = 0.5; ppd.ShowDialog(); } /// <summary> /// 导出 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnExport_Click(object sender, EventArgs e) { SaveFileDialog saveFileDialog = new SaveFileDialog(); saveFileDialog.Filter = "jpeg|*.jpg|bitmap|*.bmp|gif|*.gif|tiff|*.tif"; saveFileDialog.FilterIndex = 1; saveFileDialog.RestoreDirectory = true; if (saveFileDialog.ShowDialog() == DialogResult.OK) { pbMain.Image.Save(saveFileDialog.FileName, System.Drawing.Imaging.ImageFormat.Tiff); } } /// <summary> /// 打印 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void pdMain_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) { e.Graphics.DrawImage(image, new PointF(0,0)); } #endregion private int oldwith = 0; private int oldHeith = 0; private Point oldPoint = new Point(); /// <summary> /// 复位 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button1_Click(object sender, EventArgs e) { pbMain.Width = oldwith; pbMain.Height = oldHeith; pbMain.Location = oldPoint; } //鼠标滑轮放大缩小 void pictureBox2_MouseWheel(object sender, MouseEventArgs e) { if (e.Delta > 0) { if (pictureBox2.Width < 12000 && pictureBox2.Height < 7000) { pictureBox2.Width = pictureBox2.Width + int.Parse(Math.Ceiling(pictureBox2.Width * step).ToString()); pictureBox2.Height = pictureBox2.Height + int.Parse(Math.Ceiling(pictureBox2.Height * step).ToString()); pictureBox2.Location = new Point((panelEx2.Width - pictureBox2.Width) / 2, (panelEx2.Height - pictureBox2.Height) / 2); } } else { if (pictureBox2.Width > 70 && pictureBox2.Height > 40) { pictureBox2.Width = pictureBox2.Width - int.Parse(Math.Ceiling(pictureBox2.Width * step).ToString()); pictureBox2.Height = pictureBox2.Height - int.Parse(Math.Ceiling(pictureBox2.Height * step).ToString()); pictureBox2.Location = new Point((panelEx2.Width - pictureBox2.Width) / 2, (panelEx2.Height - pictureBox2.Height) / 2); } } } } }
Winform窗体图片的拖动,放大,缩小,复位,打印预览,鼠标滑轮的放大缩小
最新推荐文章于 2022-12-28 15:13:08 发布