找回密码
 立即注册

QQ登录

只需一步,快速开始

沙尘暴

初级会员

38

主题

111

帖子

319

积分

初级会员

积分
319
沙尘暴
初级会员   /  发表于:2016-10-26 11:58  /   查看:6116  /  回复:9

         如题:
                         在imageViewer1中同一平面  同时  显示两个以上图片(就像ps中的图像拼接),有没有这方面例子或者方法。谢谢

评分

参与人数 1金币 +300 收起 理由
gw0506 + 300 很给力!

查看全部评分

9 个回复

倒序浏览
沙尘暴
初级会员   /  发表于:2016-10-26 15:58:57
沙发
我已经找到一点门路了,  好像得设置 FloaterImage    但是我没有找到具体的例子,求助啊
回复 使用道具 举报
gw0506
超级版主   /  发表于:2016-10-26 16:38:01
板凳
本身imageViewer只能加载一个ImageSource。我大概理解你需要的功能,不过imageviewer不支持。

不过根据这个需求,我个人建议可以考虑在Form里放多个imageviewer,然后自己接事件做imageviewer的拖动等行为。不过这个想法就没有示例可参考了。
回复 使用道具 举报
沙尘暴
初级会员   /  发表于:2016-10-27 09:24:05
地板
你好  我说的这个功能leadtools是肯定能实现,或许我表达的方法不对,因为我在之前的公司就用过,他们用的就是leadtools的开发的,而且之前工程师也说是用leadtools实现的,但具体怎么实现的不方便说。

假如你这里查不到的话,哪我想问下 CombineFloater Method (ImageViewer)    这个浮图类似的功能,或者例子有没有呢,我没有找到。
回复 使用道具 举报
gw0506
超级版主   /  发表于:2016-10-27 16:44:45
5#
https://www.leadtools.com/help/l ... tml?platform=dotnet
  1. using Leadtools.WinForms;
  2. using Leadtools;
  3. using Leadtools.Codecs;
  4. using Leadtools.ImageProcessing.Color;
  5. using Leadtools.Drawing;

  6. private void viewer_FloaterInteractiveModeEnded(object sender, EventArgs e)
  7. {
  8.    // an interactive mode is done.  check if its drawing a region
  9.    // if so, convert the region to a floater and set the interactive
  10.    // mode so that we can drag the floater
  11.    RasterImageViewer viewer = sender as RasterImageViewer;
  12.    if (viewer.InteractiveMode == RasterViewerInteractiveMode.Region)
  13.    {
  14.       viewer.EnableTimer = true;
  15.       viewer.RegionToFloater();
  16.       viewer.FloaterVisible = true;
  17.       viewer.AnimateFloater = true;
  18.       viewer.InteractiveMode = RasterViewerInteractiveMode.Floater;
  19.       // delete the region since we do not need it anymore
  20.       viewer.Image.MakeRegionEmpty();

  21.       MessageBox.Show("Move the floater around, double click anywhere on the viewer to combine it with the image");
  22.    }
  23. }

  24. private void viewer_DoubleClick(object sender, EventArgs e)
  25. {
  26.    // check if the interactive mode is Floater, if so,
  27.    // combine the floater with the image.
  28.    RasterImageViewer viewer = sender as RasterImageViewer;
  29.    if (viewer.InteractiveMode == RasterViewerInteractiveMode.Floater)
  30.    {
  31.       viewer.InteractiveMode = RasterViewerInteractiveMode.None;
  32.       viewer.CombineFloater(true, ImageProcessing.CombineFastCommandFlags.SourceCopy);

  33.       // get rid of the floater since we do not need it anymore
  34.       viewer.FloaterImage = null;
  35.       MessageBox.Show("The floater has been combined with the image");
  36.    }
  37. }

  38. public void RasterImageViewer_FloaterImage(RasterImageViewer viewer)
  39. {
  40.    // hook into the viewer InteractiveModeEnded and DoubleClick events
  41.    viewer.InteractiveModeEnded += new EventHandler(viewer_FloaterInteractiveModeEnded);
  42.    viewer.DoubleClick += new EventHandler(viewer_DoubleClick);

  43.    // first set the interactive mode to draw a freehand region
  44.    viewer.InteractiveRegionType = RasterViewerInteractiveRegionType.Freehand;
  45.    viewer.InteractiveRegionCombineMode = RasterRegionCombineMode.Set;
  46.    viewer.InteractiveMode = RasterViewerInteractiveMode.Region;

  47.    MessageBox.Show("Draw a freehand region on the image");

  48. }
复制代码
回复 使用道具 举报
沙尘暴
初级会员   /  发表于:2016-10-31 16:30:27
6#
谢谢  指导,,我找到方法实现了。
回复 使用道具 举报
gw0506
超级版主   /  发表于:2016-10-31 18:16:48
7#
太太好了,如果你愿意把你实现的方法的例子分享出来,发布到“源码库”中,让更多人收益,我们可以送你金币表示感谢~~
回复 使用道具 举报
沙尘暴
初级会员   /  发表于:2016-11-2 10:09:42
8#
大概思路如下:

       public void Addimg(RasterImage img)
        {
           //从外部添加图像,第2次自动浮图
            if (_img == null)
            {
                _img= img.Clone();
                imgeview.Image = CreateA0Image(_img).Clone();
                imgeview.Floater = _img.Clone();               
                imgeview.CombineFloater(true);
              
            }
            else
            {
                imgeview.Floater = img.Clone();
            }
        }

        public RasterImage CreaimgeA0(RasterImage img)
        {

            //创建拼接图像的约4倍
            RasterImage result;
            try
            {
                float num = (float)(400 * img.XResolution) / 25.4f;
                float num2 = (float)(850 * img.YResolution) / 25.4f;
                RasterImage rimage = new RasterImage(RasterMemoryFlags.Conventional, (int)num, (int)num2, img.BitsPerPixel, img.Order, img.ViewPerspective,

img.GetPalette(), IntPtr.Zero, 0);

                FillCommand cmdfill = new FillCommand(RasterColor.White);
                cmdfill.Run(rimage);
                rimage.XResolution = img.XResolution;
                rimage.YResolution = img.YResolution;
                result = rimage;
            }
            catch
            {
                result = null;
            }
            return result;
        }

        public static Frmpj CreateFrom()
        {
            //一个窗体
            if (instance == null || instance.IsDisposed)
            {
                instance = new Frmpj();
            }
            return instance;
        }      

      

        private void button5_Click(object sender, EventArgs e)
        {
           
            //移动浮图
   
            imgeview.InteractiveModes.BeginUpdate();
            imgeview.InteractiveModes.Add(new ImageViewerFloaterInteractiveMode
            {
                ZoomKeyModifier = Keys.None,
                IsEnabled = true,
                FloaterOpacity = 0.5
            });
            imgeview.InteractiveModes.EndUpdate();
        }
回复 使用道具 举报
沙尘暴
初级会员   /  发表于:2016-11-2 10:10:15
9#
谢谢  关贴吧
回复 使用道具 举报
gw0506
超级版主   /  发表于:2016-11-2 14:06:33
10#
感谢分享,送了300金币,聊表心意~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部