找回密码
 立即注册

QQ登录

只需一步,快速开始

wjy72

初级会员

17

主题

122

帖子

287

积分

初级会员

积分
287

活字格认证微信认证勋章

wjy72
初级会员   /  发表于:2015-10-13 14:58  /   查看:6114  /  回复:9
对第三个问题,我使用了region getData和 setData;还有GetGdiRegionData和AddGdiDataToRegion,结果只有region的外形,region里面的内容图像,一点影子都没有。

9 个回复

倒序浏览
AvoCaDolol活字格认证 Wyn认证
社区贡献组   /  发表于:2015-10-13 16:40:00
沙发
您好,如果您想要拷贝到剪贴板请参考如下方法:
RasterClipboard.Copy(
                  this.Handle,
                  RasterImage,
                  RasterClipboardCopyFlags.Empty |
                  RasterClipboardCopyFlags.Dib |
                  RasterClipboardCopyFlags.Palette |
                  RasterClipboardCopyFlags.Region);
其中RasterImage是您需要拷贝的图像,如果您框选一个区域,然后拷贝的话,可以把图片的Region取出来放到一个新的RasterImage中,然后拷贝。
简单做法是使用Viewer中的Floater对象,ImageViewer叫Floater,RasterImageViewer中叫做FloaterImage。
剪切Cut的做法跟这个同样,只是多了一个步骤就是将Floater清除即可。
粘贴Paste做法稍微复杂一些,首先需要从剪贴板中取出之前拷贝的内容并将其先粘贴到一个RasterImage对象中:
RasterImage image = RasterClipboard.Paste(this.Handle);
然后将这个RasterImage对象赋值给Viewer的Floater或者FloaterImage对象既可在界面上看到这个粘贴的图像了。
如果需要合并,需要调用CombineCommand将Floater中的图像和Viewer.Image进行合并既可。
以上,谢谢。
回复 使用道具 举报
wjy72
初级会员   /  发表于:2015-10-16 14:26:00
板凳
你好,按你的指点,COPY,PASTE都好了。就是CUT,你所指的:
剪切Cut的做法跟这个同样,只是多了一个步骤就是将Floater清除即可。

这个如何做?
我通过原来的清除内部,将REGION里的清除掉了,也算是CUT了,呵呵。
回复 使用道具 举报
wjy72
初级会员   /  发表于:2015-10-16 14:28:00
地板
private void 复制CToolStripButton_Click(object sender, EventArgs e)
        {
            if(rasterImageViewer1.Image.HasRegion)
            {
                LeadRect rc = rasterImageViewer1.Image.GetRegionBounds(null);
                // 将这一部分变为一张图片
                RasterImage imgCopy = new RasterImage(rasterImageViewer1.Image.Clone(rc));
                RasterClipboard.Copy(
                  rasterImageViewer1,
                  imgCopy,
                  RasterClipboardCopyFlags.Empty |
                  RasterClipboardCopyFlags.Dib |
                  RasterClipboardCopyFlags.Palette |
                  RasterClipboardCopyFlags.Region);
            }
        }

   private void 粘贴PToolStripButton_Click(object sender, EventArgs e)
        {
            if (RasterClipboard.IsReady)
            {
                RasterImage newImage = RasterClipboard.Paste(rasterImageViewer1);
                rasterImageViewer1.FloaterImage = newImage;

                rasterImageViewer1.RegionToFloater();
                rasterImageViewer1.FloaterVisible = true;
                rasterImageViewer1.AnimateFloater = true;
                rasterImageViewer1.InteractiveMode = RasterViewerInteractiveMode.Floater;
                rasterImageViewer1.InteractiveRegionType = RasterViewerInteractiveRegionType.Freehand;
                rasterImageViewer1.InteractiveRegionCombineMode = RasterRegionCombineMode.Set;
            }
        }

  private void 剪切UToolStripButton_Click(object sender, EventArgs e)
        {

            LeadRect rc = rasterImageViewer1.Image.GetRegionBounds(null);
            // 将这一部分变为一张图片
            RasterImage imgCopy = new RasterImage(rasterImageViewer1.Image.Clone(rc));
            RasterClipboard.Copy(
              rasterImageViewer1,
              imgCopy,
              RasterClipboardCopyFlags.Empty |
              RasterClipboardCopyFlags.Dib |
              RasterClipboardCopyFlags.Palette |
              RasterClipboardCopyFlags.Region);
              //清除内部
               clearInternal();
        }

保存时再合并图像
回复 使用道具 举报
wjy72
初级会员   /  发表于:2015-10-16 14:42:00
5#
//假如是粘贴的话,保存时要先将图像合并
            if (rasterImageViewer1.InteractiveMode == RasterViewerInteractiveMode.Floater)
            {
                rasterImageViewer1.InteractiveMode = RasterViewerInteractiveMode.Region;
                rasterImageViewer1.CombineFloater(true, Leadtools.ImageProcessing.CombineFastCommandFlags.SourceCopy);
            }
回复 使用道具 举报
wjy72
初级会员   /  发表于:2015-10-16 16:20:00
6#
但是这里出现了一个问题,就是listView中的所有图像都会有RasterClipboard里的图片,这个怎么解决?重启软件后,其他图像就没有了。
回复 使用道具 举报
wjy72
初级会员   /  发表于:2015-10-19 08:57:00
7#
6#的问题,请回复。Paste后,点击listView的下一个图像,RasterClipboard里的图片都有显示。保存后也有显示,怎么解决?
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2015-10-19 09:50:00
8#
回复 7楼wjy72的帖子

正在处理中,稍后回复给您。
回复 使用道具 举报
wjy72
初级会员   /  发表于:2015-10-27 09:12:00
9#
该问题经与SUPPORT协商,用注释中的矩形框来选定区域并且FLOATER,问题算解决了。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2015-10-27 10:55:00
10#
回复 9楼wjy72的帖子

亲,问题解决给评个分吧~

评分

参与人数 1满意度 +5 收起 理由
wjy72 + 5 谢谢

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部