找回密码
 立即注册

QQ登录

只需一步,快速开始

AvoCaDolol活字格认证 Wyn认证
社区贡献组   /  发表于:2015-9-25 16:41:00
11#
回复 9楼wjy72的帖子

您好,Inverse Perspective功能中调用的就是这个KeyStoneCommand。
点击Inverse Perspective功能后,需要在您的图片上画4个点,这4个点会连接成为一个四边形。
您需要使用这4个点将需要校正的文本主题框出来,之后选择确定即可。
请看我的操作过程动画:


希望能帮助到您。
以上,谢谢。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
wjy72
初级会员   /  发表于:2015-9-25 16:48:00
12#
好的,谢谢。
那个例子我去仔细研究一下。
关于切割,
// 调用裁剪方法对原始图像裁剪,去掉切割的部分
CropCommand command = new CropCommand();
command.Rectangle = rasterImageViewer1.Image.GetRegionBounds(null);
command.Run(rasterImageViewer1.Image);

这里好像还是切割原来选定的区域。如果反选的话,我试了,还是不对。这里是要判断右上角和左下角的位置?
回复 使用道具 举报
AvoCaDolol活字格认证 Wyn认证
社区贡献组   /  发表于:2015-9-25 16:53:00
13#
回复 12楼wjy72的帖子

您好,
能否将您的代码贴上来,我看下。
回复 使用道具 举报
wjy72
初级会员   /  发表于:2015-9-28 08:50:00
14#
RasterImage imgCopy;
// 取得您需要切割的部分
LeadRect rc = rasterImageViewer1.Image.GetRegionBounds(null);
// 将这一部分变为一张图片
imgCopy = new RasterImage(rasterImageViewer1.Image.Clone(rc));
// 调用裁剪方法对原始图像裁剪,去掉切割的部分
rasterImageViewer1.Image.AddRectangleToRegion(null, rc, RasterRegionCombineMode.SetNot);

CropCommand command = new CropCommand();

command.Rectangle = rasterImageViewer1.Image.GetRegionBounds(null);

command.Run(rasterImageViewer1.Image);

//一般切割是针对单张图片,可以在原文件名后加-1,以便保存。
string twoTiffFile = realImageFile.Substring(0, realImageFile.LastIndexOf(".tif")) + "-1.tif";
//之后分别保存
            //保存原图片
saveToTiffFile();
            //保存切割后的图片
_pageMode = CodecsSavePageMode.Overwrite;
codecs.Save(imgCopy,
        twoTiffFile,
         imgCopy.OriginalFormat,
         imgCopy.BitsPerPixel,
         1,
         1,
          1,
         _pageMode);
回复 使用道具 举报
wjy72
初级会员   /  发表于:2015-9-28 10:46:00
15#
另外,请问一下 undo 和 redo 如何实现?
回复 使用道具 举报
wjy72
初级会员   /  发表于:2015-9-28 13:26:00
16#
切割我做好了,代码如下:
  private void toolStripButton切割_Click(object sender, EventArgs e)
        {

RasterImage imgCopy;
// 取得您需要切割的部分
LeadRect rc = rasterImageViewer1.Image.GetRegionBounds(null);
// 将这一部分变为一张图片
imgCopy = new RasterImage(rasterImageViewer1.Image.Clone(rc));
// 调用裁剪方法对原始图像裁剪,去掉切割的部分

LeadRect newRc = new LeadRect();



if(rc.Width>rc.Height)//上下切割
{
    //获取左下角

    if(rc.Top>rasterImageViewer1.Image.Height-rc.Bottom) //所选区域在下面
    {

        newRc = new LeadRect(0, 0, rasterImageViewer1.Image.Width, rc.Top);


    }else
    {

        newRc = new LeadRect(0, rc.Bottom, rasterImageViewer1.Image.Width, rasterImageViewer1.Image.Height - rc.Bottom);

    }

}else
{
    //左右切割
    //获取右下角

    if(rc.Left>rasterImageViewer1.Image.Width-rc.Right) //所选区域在右边
    {
        newRc = new LeadRect(0, 0, rc.Left, rasterImageViewer1.Image.Height);
    }
    else
    {

        newRc = new LeadRect(0, rc.Right, rasterImageViewer1.Image.Width-rc.Right, rasterImageViewer1.Image.Height);

    }

}


CropCommand command = new CropCommand();

command.Rectangle = newRc;

command.Run(rasterImageViewer1.Image);

//一般切割是针对单张图片,可以在原文件名后加-1,以便保存。
string twoTiffFile = realImageFile.Substring(0, realImageFile.LastIndexOf(".tif")) + "-1.tif";
//之后分别保存
            //保存原图片
saveToTiffFile();
            //保存切割后的图片
_pageMode = CodecsSavePageMode.Overwrite;
codecs.Save(imgCopy,
        twoTiffFile,
         imgCopy.OriginalFormat,
         imgCopy.BitsPerPixel,
         1,
         1,
          1,
         _pageMode);

//刷新LISTVIEW1


        }
回复 使用道具 举报
AvoCaDolol活字格认证 Wyn认证
社区贡献组   /  发表于:2015-9-28 15:56:00
17#
回复 15楼wjy72的帖子

您好,LEADTOOLS官方给的解释是基于图像的操作是不可逆的,所以无法实现撤销重做的操作。
如果您想实现这个功能的话,可以自己定义两个列表List<RasterImage>,用来存储每一步操作前的图像,需要撤销时将这个列表中的上一个图片取出来显示即可,重做的话从另一个列表中将之前撤销的图片再次取出来显示即可。
网上也有很多类似功能包装好的类,您可以搜索看看。
另外,LEADTOOLS的Demo中有一个实现了撤销、重做的功能,这个Demo中就是按照我刚说的思路做的。
这个Demo名称是GrayScaleDemo,路径在这里:安装盘:\LEADTOOLS 19\Examples\DotNet\CS\GrayScaleDemo
Demo中的ViewerForm.cs中第2652行就是Undo方法,下面紧跟的是Redo方法,您可以拿来参考。
以上,希望能帮助到您。
回复 使用道具 举报
wjy72
初级会员   /  发表于:2015-9-29 09:24:00
18#
好的,谢谢。现在做手动纠偏,还是出现了问题。
我定义的是rasterImageViewer,样例中是ImageViewer,两者的事件不同。比如ImageViewer有  PostRender,而rasterImageViewer没有。这个怎么办?能否帮我做个简单样例?DEMO中的样例,实在太复杂。还有注释,也是。谢谢
回复 使用道具 举报
frank.zhang
社区贡献组   /  发表于:2015-9-29 17:39:00
19#
您好,
您的问题,我们已经收到,会和产品经理确认后,给您反馈。
回复 使用道具 举报
wjy72
初级会员   /  发表于:2015-10-9 10:58:00
20#
上班啦,请赶紧帮我解决这最后两个问题:
1. 自动纠偏。
2.注释

不要用例子来打发我,太麻烦了。直接做个简单样例给我吧。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部