关于deepzoom在blend里面导出并且实现放大缩小以及平移。
来源:互联网 发布:听见下雨的声音 知乎 编辑:程序博客网 时间:2024/04/29 03:00
public partial class MainPage : UserControl
{
bool isMouseDown=false;
bool drag = false;
Point MouseCurrentPosition;
Point DeepZoomCurrentPosition;
double zoom = 1;
public MainPage()
{
InitializeComponent();
msi.ViewportChanged += new RoutedEventHandler(msi_ViewportChanged);
msi.MouseLeftButtonDown += new MouseButtonEventHandler(msi_MouseLeftButtonDown);
msi.MouseMove += new MouseEventHandler(msi_MouseMove);
msi.MouseLeftButtonUp += new MouseButtonEventHandler(msi_MouseLeftButtonUp);
msi.MouseWheel += new MouseWheelEventHandler(msi_MouseWheel);
}
void msi_ViewportChanged(object sender, RoutedEventArgs e)
{
Point viewportOrigin = msi.ViewportOrigin;
double viewportWidth = msi.ViewportWidth;
overlayScale.ScaleX = 1 / viewportWidth;
overlayScale.ScaleY = 1 / viewportWidth;
Point newO = LogicalToElement(new Point(), viewportOrigin, viewportWidth);
overlayTranslate.X = newO.X;
overlayTranslate.Y = newO.Y;
}
private Point LogicalToElement(Point p, Point Origin, double Width)
{
return new Point(((p.X - Origin.X) / Width) * msi.ActualWidth,
((p.Y - Origin.Y) / Width) * msi.ActualWidth);
}
public void Zoom(double zoom, Point pointToZoom)
{
Point logicalPoint =this.msi.ElementToLogicalPoint(pointToZoom);
this.msi.ZoomAboutLogicalPoint(zoom, logicalPoint.X, logicalPoint.Y);
}
private void msi_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
isMouseDown = true;
MouseCurrentPosition = e.GetPosition(msi);
DeepZoomCurrentPosition = msi.ViewportOrigin;
msi.CaptureMouse();
}
private void msi_MouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
isMouseDown = false;
drag = false;
msi.ReleaseMouseCapture();
}
private void msi_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)
{
if (isMouseDown && !drag)
{
drag = true;//拖放启用
double w = msi.ViewportWidth;//图形区域
Point po = new Point(msi.ViewportOrigin.X, msi.ViewportOrigin.Y);
msi.UseSprings = false;//禁用弹簧动画
msi.ViewportOrigin = po;//重新赋值坐标
msi.ViewportWidth = w;
zoom = 1 / w;//1表示整个图片 w表示多少区域
msi.UseSprings = true;
}
if (drag)
{
Point newpoint = DeepZoomCurrentPosition;
newpoint.X += (((MouseCurrentPosition.X- e.GetPosition(msi).X ) / msi.ActualWidth) * msi.ViewportWidth);
newpoint.Y += (((MouseCurrentPosition.Y- e.GetPosition(msi).Y )/msi.ActualHeight) * msi.ViewportWidth);
msi.ViewportOrigin = newpoint;
}
}
private Point lastMousePos = new Point();
private void msi_MouseWheel(object sender, System.Windows.Input.MouseWheelEventArgs e)
{
double newzoom = zoom;
if (e.Delta < 0)
{
newzoom /= 1.3;//缩小
}
else
{
newzoom *= 1.3;//放大
}
//转换成0-1之间坐标
Point p = msi.ElementToLogicalPoint(e.GetPosition(null));
zooms(newzoom, p);
} private void zooms(double newzoom, Point p)
{
if (newzoom< 0.5)
newzoom = 0.5;//最小0.5
//newzoom除以zoom 因为1正好整个图片 所以除以上次zoom的数就是缩小或者放大
msi.ZoomAboutLogicalPoint(newzoom / zoom, p.X, p.Y);
zoom = newzoom;
}
{
bool isMouseDown=false;
bool drag = false;
Point MouseCurrentPosition;
Point DeepZoomCurrentPosition;
double zoom = 1;
public MainPage()
{
InitializeComponent();
msi.ViewportChanged += new RoutedEventHandler(msi_ViewportChanged);
msi.MouseLeftButtonDown += new MouseButtonEventHandler(msi_MouseLeftButtonDown);
msi.MouseMove += new MouseEventHandler(msi_MouseMove);
msi.MouseLeftButtonUp += new MouseButtonEventHandler(msi_MouseLeftButtonUp);
msi.MouseWheel += new MouseWheelEventHandler(msi_MouseWheel);
}
void msi_ViewportChanged(object sender, RoutedEventArgs e)
{
Point viewportOrigin = msi.ViewportOrigin;
double viewportWidth = msi.ViewportWidth;
overlayScale.ScaleX = 1 / viewportWidth;
overlayScale.ScaleY = 1 / viewportWidth;
Point newO = LogicalToElement(new Point(), viewportOrigin, viewportWidth);
overlayTranslate.X = newO.X;
overlayTranslate.Y = newO.Y;
}
private Point LogicalToElement(Point p, Point Origin, double Width)
{
return new Point(((p.X - Origin.X) / Width) * msi.ActualWidth,
((p.Y - Origin.Y) / Width) * msi.ActualWidth);
}
public void Zoom(double zoom, Point pointToZoom)
{
Point logicalPoint =this.msi.ElementToLogicalPoint(pointToZoom);
this.msi.ZoomAboutLogicalPoint(zoom, logicalPoint.X, logicalPoint.Y);
}
private void msi_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
isMouseDown = true;
MouseCurrentPosition = e.GetPosition(msi);
DeepZoomCurrentPosition = msi.ViewportOrigin;
msi.CaptureMouse();
}
private void msi_MouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
isMouseDown = false;
drag = false;
msi.ReleaseMouseCapture();
}
private void msi_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)
{
if (isMouseDown && !drag)
{
drag = true;//拖放启用
double w = msi.ViewportWidth;//图形区域
Point po = new Point(msi.ViewportOrigin.X, msi.ViewportOrigin.Y);
msi.UseSprings = false;//禁用弹簧动画
msi.ViewportOrigin = po;//重新赋值坐标
msi.ViewportWidth = w;
zoom = 1 / w;//1表示整个图片 w表示多少区域
msi.UseSprings = true;
}
if (drag)
{
Point newpoint = DeepZoomCurrentPosition;
newpoint.X += (((MouseCurrentPosition.X- e.GetPosition(msi).X ) / msi.ActualWidth) * msi.ViewportWidth);
newpoint.Y += (((MouseCurrentPosition.Y- e.GetPosition(msi).Y )/msi.ActualHeight) * msi.ViewportWidth);
msi.ViewportOrigin = newpoint;
}
}
private Point lastMousePos = new Point();
private void msi_MouseWheel(object sender, System.Windows.Input.MouseWheelEventArgs e)
{
double newzoom = zoom;
if (e.Delta < 0)
{
newzoom /= 1.3;//缩小
}
else
{
newzoom *= 1.3;//放大
}
//转换成0-1之间坐标
Point p = msi.ElementToLogicalPoint(e.GetPosition(null));
zooms(newzoom, p);
} private void zooms(double newzoom, Point p)
{
if (newzoom< 0.5)
newzoom = 0.5;//最小0.5
//newzoom除以zoom 因为1正好整个图片 所以除以上次zoom的数就是缩小或者放大
msi.ZoomAboutLogicalPoint(newzoom / zoom, p.X, p.Y);
zoom = newzoom;
}
- 关于deepzoom在blend里面导出并且实现放大缩小以及平移。
- Andriod SeekBar以及实现图片旋转平移放大缩小
- JavaScript实现图片的放大、缩小、平移
- Qt+OpenGL实现正方体旋转平移放大缩小,以及六个面贴不同图片
- wpf下实现图片的放大缩小和平移
- wpf下实现图片的放大缩小和平移
- photoview实现图片双击放大缩小平移操作
- 放大、缩小、平移、全图
- 放大、缩小、平移、全图
- 自定义ImageView(实现图片的放大缩小;放大后可平移)
- 在c#中如何实现对图象的翻转、放大、缩小操作以及缩微图
- Android多点触控技术,实现对图片的放大缩小平移,惯性滑动等功能
- Android多点触控技术,实现对图片的放大缩小平移,惯性滑动等功能
- andriod 利用WebView实现 图片放大缩小以及移动[转]
- js实现图片滚轮放大缩小以及鼠标拖动
- Qt实现长图片的放大缩小以及动态显示
- ExtJs 完美实现图片在Window窗口中通过鼠标滚轮放大缩小以及点击拖拽
- 在页面里实现DIV放大、缩小的功能
- hdu 4662 MU Puzzle
- 启动tomcat一闪而过(问题解决)
- android游戏引擎
- HM中CU,TU的划分
- 把给定的字符串解析为Date对象
- 关于deepzoom在blend里面导出并且实现放大缩小以及平移。
- FTP操作脚本
- jQuery 查询数据返回 object 和 字符串 影响原因之一
- Oracle常用数据字典表
- Android NDK C++开发注意事项总结
- Hibernate Session篇--org.hibernate.NonUniqueObjectException分析及解决
- Android模拟器的配置
- 初学者如何查阅自然语言处理(NLP)领域学术资料
- 类型转换