图片放大、缩小、恢复操作的实现

C#(winform)实现图片的无损放大缩小【点击鼠标滚动键放大缩小 usingSystem;//来源于www.uzhanbao.com usingSystem.Collections.Generic; usingSystem.ComponentModel; usingSystem.Data; usingSystem.Text; usingSystem.Windows.Forms; usingSystem.Drawing; usingSystem.D... 阅读详情

无论怎样实现图片的显示操作,基本上都是将图片显示在类似于Canvas控件中。图片的放大、缩小和恢复操作就是通过计算图片的显示大小比例来实现图片的放大缩小和恢复功能。

在下面提供图片的比例的计算类,其中包含图片放大和缩小的比率,很简单。


package com.tool;

public class ZoomInOut {
	private static double rate = 1;
	public static double onZoom(int zoom) {
		double drate = 0;
		if (zoom == 0) {
			drate = showOriginal();
		} else if (zoom > 0) {
			drate = zoomOut();
		} else if (zoom < 0) {
			drate = zoomIn();
		}
		return drate;
	}
	
	private static double showOriginal() {
		rate = 1;
		return rate;
	}
	
	private static double zoomIn() {
		// 销毁缩放图片,重新计算缩放图片
		rate = rate - 0.1;
		if (rate < 0.1) {
			rate = 0.1;
		}
		return rate;
	}
	
	private static double zoomOut() {
		// 销毁缩放图片,重新计算缩放图片
		rate = rate + 0.1;
		if (rate > 5) {
			rate = 5;
		}
		return rate;
	}
}


通过double rate = ZoomInOut.onZoom(int i)方法来获取图片的显示比例。

double rate = ZoomInOut.onZoom(0);表示恢复图片原始大小。

double rate = ZoomInOut.onZoom(1);表示图片进行放大操作。

double rate = ZoomInOut.onZoom(-1);表示图片进行缩小操作。


我使用SWT做了一个Demo来验证下:

代码如下:

package swt_jface.demo3;

import org.eclipse.swt.widgets.Display;

public class ImageZoomOut {

	protected Shell shell;
	private Canvas canvas ;
	private Image image;
	private double rate = 1;

	/**
	 * Launch the application.
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			ImageZoomOut window = new ImageZoomOut();
			window.open();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * Open the window.
	 */
	public void open() {
		Display display = Display.getDefault();
		createContents();
		shell.open();
		shell.layout();
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch()) {
				display.sleep();
			}
		}
	}

	/**
	 * Create contents of the window.
	 */
	protected void createContents() {
		shell = new Shell();
		shell.setSize(678, 576);
		shell.setText("SWT Application");
		shell.setLayout(new FillLayout(SWT.HORIZONTAL));
		{
			Composite composite = new Composite(shell, SWT.NONE);
			Composite composite_1 = new Composite(composite, SWT.BORDER);
			composite_1.setLayout(new FillLayout(SWT.HORIZONTAL));
			{
				 canvas = new Canvas(composite_1, SWT.NONE);
				 canvas.addPaintListener(new PaintListener() {
				 	public void paintControl(PaintEvent e) {
				 		if (image != null) {
				 			int width = (int)(image.getBounds().width * rate);
				 			int heigth = (int)(image.getBounds().height * rate);
							e.gc.drawImage(image, 0, 0, image.getBounds().width, image.getBounds().height, 0, 0, width, heigth);
						}
				 	}
				 });
			}
			Group group = new Group(composite, SWT.NONE);
			{
				Button button = new Button(group, SWT.NONE);
				button.addSelectionListener(new SelectionAdapter() {
					@Override
					public void widgetSelected(SelectionEvent e) {
						FileDialog fileDialog = new FileDialog(shell, SWT.OPEN);
						String[] extentions = new String[]{".jpg", ".bmp", ".*"};
						fileDialog.setFilterNames(extentions);
						fileDialog.open();
						if (fileDialog.getFilterPath() != null && !fileDialog.getFilterPath().equals("")) {
							String imagepath = fileDialog.getFilterPath() + "\\" + fileDialog.getFileName();
							image = new Image(Display.getDefault(), imagepath);
							if (image != null) {
								canvas.redraw();
							}
						}
					}
				});
				button.setBounds(137, 40, 72, 22);
				button.setText("选择图片");
			}
			{
				Button button = new Button(group, SWT.NONE);
				button.addSelectionListener(new SelectionAdapter() {
					@Override
					public void widgetSelected(SelectionEvent e) {
						zoomImageOperation(1);
					}
				});
				button.setBounds(234, 40, 72, 22);
				button.setText("放大");
			}
			{
				Button button = new Button(group, SWT.NONE);
				button.addSelectionListener(new SelectionAdapter() {
					@Override
					public void widgetSelected(SelectionEvent e) {
						zoomImageOperation(-1);
					}
				});
				button.setBounds(337, 40, 72, 22);
				button.setText("缩小");
			}
			{
				Button button = new Button(group, SWT.NONE);
				button.addSelectionListener(new SelectionAdapter() {
					@Override
					public void widgetSelected(SelectionEvent e) {
						zoomImageOperation(0);
					}
				});
				button.setBounds(440, 40, 72, 22);
				button.setText("恢复");
			}
			GroupLayout gl_composite = new GroupLayout(composite);
			gl_composite.setHorizontalGroup(
				gl_composite.createParallelGroup(GroupLayout.LEADING)
					.add(composite_1, GroupLayout.DEFAULT_SIZE, 670, Short.MAX_VALUE)
					.add(group, GroupLayout.DEFAULT_SIZE, 670, Short.MAX_VALUE)
			);
			gl_composite.setVerticalGroup(
				gl_composite.createParallelGroup(GroupLayout.LEADING)
					.add(gl_composite.createSequentialGroup()
						.add(composite_1, GroupLayout.DEFAULT_SIZE, 433, Short.MAX_VALUE)
						.addPreferredGap(LayoutStyle.RELATED)
						.add(group, GroupLayout.PREFERRED_SIZE, 103, GroupLayout.PREFERRED_SIZE))
			);
			composite.setLayout(gl_composite);
		}
	}
	
	private void zoomImageOperation(int i) {
		rate = ZoomInOut.onZoom(i);
		canvas.redraw();
	}
}

实现成功的截图:




点击放大按钮:



实现成功。

=================================== OVER ====================================

Magnification API-Windows放大 Windows Vista系统之后引入了Magnification API函数,链库为Magnification.dll用于桌面放大,Win7系统只有以下函数: 1、MagInitialize:装载Magnification功能 2、MagUninitialize:卸载Magnification 功能 3、MagGetColorEffect:获取颜色配置 4、MagSetImageScalingCallback:获得捕获桌面图像数据回调函数 5、MagGetWindowFilterList:获取要(或者排除 阅读详情

相关推荐

Vue实现弹框的堆叠、放大缩小、拖拽功能。

Vue实现弹框的堆叠、放大缩小、拖拽功能。 图片示例: 首先,向大家推荐一个比较好用的一个东西,vxe-table((https://xuliangzhan_admin.gitee.io/vxe-table/#/table/advanced/template)),弹框的堆叠、拖拽、放大缩小,都可以在里面找到相应的功能。 代码: //下载安装包 npm install xe-utils@3 vxe-table@3 yarn add xe-utils@3 vxe-table@

qq_43509260的博客 3844

点击放大图片,滑动可放大缩小

点击图片放大,滚动鼠标图片放大缩小,适应pc和移动端

点击图片放大缩小的效果

放大效果

SWT中显示图片并调整大小

如何在SWT中显示图片并调整大小呢?在swt中要显示的图片是不能改变大小的,比如我们用backgroundimage。但是有时我需要把我们想要显示的图片按一定比例自动的适应我们要显示的区域,这是我们要用画图的方法来实现。 每一个控件都有一个paintContral的事件,我们可以

abrahu的专栏 1万+

自定义ImageView(实现图片放大缩小;放大后可平移)

忘记从哪看到了 分享一下

guanguangg的博客 1837

ExtJs 完美实现图片在Window窗口中通过鼠标滚轮放大缩小以及点击拖拽

ExtJs 完美实现图片在Window窗口中通过鼠标滚轮放大缩小以及点击拖拽以下内容需要一定的ExtJs以及Js知识基础 ExtJs 完美实现图片在Window中通过鼠标滚轮放大缩小以及点击拖拽以下内容需要一定的ExtJs以及Js知识作为基础,不过我会尽量详细解释。Ext.define('window.ViewPicWin',{//定义一个类继承window 所有配置都在该类里 包括图片地址等

lany1988的博客 4628

安卓手势处理(三)之实现图片放大缩小

这一篇来实现下面的效果: 其实上面的效果可以用ScaleGestureDetector很容易实现,不过在这里我想自己动手实现一下这个简单的功能,然后在后面用GestureDetector来实现更全面的效果,并且封装成一个可支持手势放大缩小Imageview。 ImageView的缩小放大是基于Matrix的,这个类其实是一个矩阵,放大缩小、位移、旋转其实就是矩阵变换操作。具体可以看这篇文章:...

whoami_I的博客 1345

iOS开发 UI高级 图片放大缩小实现

#import @interface ChangeScaleView : UIImageView @property(nonatomic,strong)UIScrollView *scrollView; @property(nonatomic,strong)UIImageView *scaleImageView; @end#import "ChangeScaleView.h" @implem

A_Studystudy的博客 1059

javascript实现图片的随意拖拽,放大缩小

最近写项目的过程中需要对图片进行一个操作,点击之后弹出图片,在可定div范围内对图片进行任意拖拽位置和鼠标滚动时对其放大缩小,双击图片恢复原图!对于我们这样后台程序员而言,这种前台效果实现起来确实有点勉强,在经过半个小时挣扎之后,终于完成效果,发表上来,以供广大后台程序员借鉴吧! 第一步: body之内的代...

weixin_34403693的博客 1113

图片放大缩小恢复原比例、旋转vue

支持图片放大缩小恢复原比例、旋转

m0_68428581的博客 302

利用按键,简单的进行缩放图片

#include<iostream> #include<opencv2/opencv.hpp> #define window1 "【结果1】" #define window "【原图 】" #define window2 "【结果2】" #define window3 "【结果3】" #define window4 "【结果4】" #define window5 "【结...

gaocui883的博客 570

图片点击放大功能的实现

图片点击放大功能的实现 实现过程及思路 1、引入图片 2、向图片添加类 3、做循环判断,单次放大,双次缩小 参考代码下载地址 $(function () { var num = 0; $('#first').click(function () { num+=1; if(num == 1){ ...

weixin_39133064的博客 371

简单的flash图片浏览效果

  [要求] 按下鼠标拖动图片缓冲放大并移到最前面,松开鼠标停止拖动图片缓冲缩小。 [步骤] 导入几张图片分别转为影片元件,拖到主场景,实例名分别为pic0_mc、pic1_mc、pic2_mc……在帧上写如下代码: for (var d:Number = 0; d=200) {     delete this.onEnterFrame;    }   }; }; ...

hgfghw8 148

win32编程 -- 滚轮实现放大缩小图片

我怎么可能失望呢,我对这个世界早就不抱任何希望了。。。 ​ ---- 网易云热评 一、添加一张位图 二、相关代码 #include <windows.h>#include "resource.h"HINSTANCE g_hInstance = 0;//接收当前程序实例句柄HANDLE g_输出句柄 = 0;//接收标准输出句柄int g_x = 128;int g_y = 128;void 绘图(HWND hWnd){ PAINTSTRUCT p = {...

Web安全工具库 689

Vue实现弹窗 拖动、放大缩小

实现:拖动,上下放大和左右放大,双击头部会实现全屏,因为普通的弹窗标签会在我们点击弹窗之外的部分的时候自动关闭,所以我们需要给弹窗部分增加一个属性 页面标签引用部分 <el-dialog title="弹窗" :visible.sync="dialogVisible" :close-on-click-modal=false v-dialogDrag width="75%" > //:close-on-click-modal=false 这个属性的作用是不让点击外面关闭弹窗 &lt

qq_40407998的博客 9759

实现图片放大缩小

每次点击放大或者缩小按钮获取上一次图片宽高的的值。1先写三个按钮,创建图片放大缩小。2用js写三个对应的方法。

weixin_63752931的博客 373
上一篇: Oracle数据库定时备份导出
下一篇: SWT应用之:随机RGB颜色、ScrolledComposite控件的使用(二)————SWT Component(SWT组件)使用
CaptainGan
博客等级 码龄18年 23粉丝 12原创
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值