WEB开发网
开发学院图形图像Flash Silverlight开发实践--PicZoomShow 阅读

Silverlight开发实践--PicZoomShow

 2009-05-11 12:05:53 来源:WEB开发网   
核心提示: 后台代码:public partial class Page : UserControl { MouseEventHandler meh;//声明一个事件委托 Point MouseDownAt;//二维空间内的X,Y的坐标对 double img_actualWidth = 0;//图片

后台代码:

public partial class Page : UserControl
    {
        MouseEventHandler meh;//声明一个事件委托
        Point MouseDownAt;//二维空间内的X,Y的坐标对
        double img_actualWidth = 0;//图片宽度
        double img_actualHeight = 0;//图片高度

        public Page()
        {
            meh = new MouseEventHandler(img_c_MouseMove);
            InitializeComponent();
        }

        private void ChangeShow_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)//根据Soilder的值改变图片的大小
        {
            if (img_scale != null)
            {
                string t = e.NewValue.ToString();//获取Soilder的值,并根据值算出放大或缩小图片的大小
                img_c.Width = (ChangeShow.Value / 500) * img_actualWidth;
                img_c.Height = (ChangeShow.Value / 500) * img_actualHeight;

                string LeftT = "";
                string RightT = "";
                int index = t.IndexOf('.');

                if (index != -1)//根据图片的大小计算出图片所在的位置
                {
                    LeftT = t.Substring(0, index);
                    RightT = t.Substring(index + 1, t.Length - index - 1);
                    if (RightT.Length > 1)
                    {
                        RightT = RightT.Substring(0, 1);
                    }
                }
                else
                {
                    LeftT = t;
                    RightT = "0";
                }
            }
        }
        /// <summary>
        /// 通过编写鼠标按下,抬起,移动事件实现图片的拖动。
        /// </summary>
        private void img_c_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            img_c.MouseMove += meh;
            MouseDownAt = e.GetPosition(null);//获取鼠标当前坐标的位置
            img_c.CaptureMouse();//在此元素上强制捕获鼠标。如果成功捕获了鼠标,则为 true;否则为 false。这句话可以没有,但是建议加上。
        }

        private void img_c_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            img_c.MouseMove -= meh;
            img_c.ReleaseMouseCapture();//移出对鼠标的捕获
        }

        void img_c_MouseMove(object sender, MouseEventArgs e)
        {
            Point p = e.GetPosition(null);
            img_Scroll.ScrollToVerticalOffset(img_Scroll.VerticalOffset - ((p.Y - MouseDownAt.Y) * 1.2));//将 ScrollViewer 内的内容滚动到指定的垂直偏移量位置。
            img_Scroll.ScrollToHorizontalOffset(img_Scroll.HorizontalOffset - ((p.X - MouseDownAt.X) * 1.2));//将 ScrollViewer 内的内容滚动到指定的水平偏移量位置。
            MouseDownAt = p;
        }
        /// <summary>
        /// 初始化变量
        /// </summary>
        private void img_c_Loaded(object sender, RoutedEventArgs e)
        {
            Stretch s = img_c.Stretch;
            img_c.Stretch = Stretch.None;
            img_actualHeight = img_c.ActualHeight;
            img_actualWidth = img_c.ActualWidth;
            img_c.Stretch = s;

            ChangeShow.Value = 500;
        }
    }

代码中我作了解释,不是很难。毕竟这个实现的算法比较简单。大致的效果就是这样,小弟还有些问题请教高手,希望大虾们多多指导。

(1)如果图片的大小超过了显示区域,或者图片的大小已经超过了实际的大小,那么没有显示的部分显示在了哪里?是放在内存中吗?如果无限的增大图片,会不会导致IE的瘫掉?Silverlight内部对图像作了什么处理吗?

(2)现在的增大图片,只是将图片拉伸,求一个更好的算法,实现矢量图形最大。(如何实现矢量图形的放大,如何用SL制作矢量图)。

上一页  1 2 

Tags:Silverlight 开发 实践

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接