MODI MiSelectRects得到错误的坐标

我有一个Windows窗体应用程序,在执行时,启动火狐,抓住窗口的过程和处理,并执行的Firefox屏幕捕获,它保存到磁盘(temp.bmp),并调用ProcessGetWindow。 我基本上使用MiSelectRects MODI中捕捉到了我要找的字周围的矩形,然后我使用的AutoIt对单词鼠标点击。

问题是,我的坐标是关闭由从顶部约10个像素。

任何想法可能是错误的? 下面是所进行的处理功能。 我已经注释掉AutoIt的处理,而我只是一个MessageBox调试给我看实际坐标。 然后,我的AutoIt的窗口信息工具确认和它肯定了......我做错了什么或有什么搞砸了MODI?

public void ProcessGetWindow(Bitmap image) { Document modiDoc = null; MiDocSearch modiSearch = null; IMiSelectableItem modiTextSel = null; MiSelectRects modiSelectRects = null; MiSelectRect modiSelectRect = null; MiRects modiRects = null; int intSelInfoPN; string intSelInfoTop; int intSelInfoBottom; string intSelInfoLeft; int intSelInfoRight; // Load an existing image file. modiDoc = new Document(); modiDoc.Create(@"C:\\temp.bmp"); // Perform OCR. modiDoc.Images[0].OCR(); // Search for the selected word. modiSearch = new MiDocSearch(); modiSearch.Initialize(modiDoc, "Click Me", 0, 0, false, false); modiSearch.Search(null, ref modiTextSel); try { modiSelectRects = modiTextSel.GetSelectRects(); } catch (COMException) { MessageBox.Show("Me thinks that the OCR didn't work right!"); } foreach (MiSelectRect mr in modiSelectRects) { //intSelInfoPN = mr.PageNumber.ToString(); intSelInfoTop = mr.Top.ToString(); //intSelInfoBottom = mr.Bottom; intSelInfoLeft = mr.Left.ToString(); //intSelInfoRight = mr.Right; /*AutoItX3 auto = new AutoItX3(); auto.AutoItSetOption("MouseCoordMode", 2); auto.MouseClick("", intSelInfoLeft, intSelInfoTop, 1, 80);*/ MessageBox.Show("Coordinates: " + intSelInfoLeft + ", " + intSelInfoTop, "Coordinates", MessageBoxButtons.OK); } //string textResult = modiTextSel.Text; //MessageBox.Show(textResult, "Search Results", MessageBoxButtons.OK); // Close this dialog. Application.Exit(); }

--------------解决方案-------------

我不熟悉,介绍的工具,但是从我读GetSelectRects函数返回一个边框,这是包含整个选择,在这种情况下,你搜索词的最小矩形。 我相信发生的事情是,你点击边框,而不是在中间,那里的字是的角落。

计算的坐标为矩形的中心,并尝试一下的是:

int height = mr.Bottom - mr.Top;
int width = mr.Right - mr.Left;

AutoItX3 auto = new AutoItX3();
auto.AutoItSetOption("MouseCoordMode", 2);
auto.MouseClick("", width/2, height/2, 1, 80);

我使用的是相同的程序,找到位置。

int centerwidth = (intSelInfoRight - intSelInfoLeft)/2;
centerwidth = intSelInfoLeft + centerwidth;
int centerheight = (intSelInfoBottom - intSelInfoTop)/2;
centerheight = centerheight + intSelInfoTop;

ü可以用它查找的文本的正中间点。

但此方案总是给字,而不是下一个OCCURENCES第一occurence的位置。 请让我知道如何在所有出现的查找文本的位置。

MODI.Document modiDoc = null;
MODI.MiDocSearch modiSearch = null;
MODI.IMiSelectableItem modiTextSel = null;
MODI.MiSelectRects modiSelectRects = null;
MODI.MiSelectRect modiSelectRect = null;
MODI.MiRects modiRects = null;
int intSelInfoPN;
int intSelInfoTop;
int intSelInfoBottom;
int intSelInfoLeft;
int intSelInfoRight;

// Load an existing image file.
modiDoc = new MODI.Document();
modiDoc.Create(@"C:\Users\h117953\Desktop\OCR\1.jpg");

// Perform OCR.
//modiDoc.Images[0].OCR();
//MODI.Image image = (MODI.Image)modiDoc.Images[0];
modiDoc.OCR(MiLANGUAGES.miLANG_ENGLISH);
MODI.Image modiImage = (modiDoc.Images[0] as MODI.Image);

//string ocrtext = @"C:\Users\h117953\Desktop\OCR\Sample.txt";

//File.WriteAllText(ocrtext, modiImage.Layout.Text);

// Search for the selected word.
//int wordindex
modiSearch = new MODI.MiDocSearch();
//date to search
modiSearch.Initialize(modiDoc, "Deer", 0, 2, false, false);
modiSearch.Search(null, ref modiTextSel);
if (modiTextSel == null)
{
Response.Write("\nText not found \n");

}
else
{
Response.Write("\nText is found \n");
try
{
modiSelectRects = modiTextSel.GetSelectRects();
}
catch (Exception)
{
Response.Write("Me thinks that the OCR didn't work right!");
}

int centerwidth = 0;
int centerheight = 0;

foreach (MODI.MiSelectRect mr in modiSelectRects)
{
//intSelInfoPN = mr.PageNumber.ToString();
intSelInfoTop = mr.Top;
intSelInfoBottom = mr.Bottom;
intSelInfoLeft = mr.Left;
intSelInfoRight = mr.Right;

// MessageBox.Show("Coordinates: " + intSelInfoLeft + ", " + intSelInfoTop, "Coordinates", MessageBoxButtons.OK);
// MessageBox.Show("Coordinates: " + intSelInfoRight + ", " + intSelInfoBottom, "Coordinates", MessageBoxButtons.OK);
centerwidth = (intSelInfoRight - intSelInfoLeft) / 2;
centerwidth = intSelInfoLeft + centerwidth;
centerwidth = (intSelInfoBottom - intSelInfoTop) / 2;
centerheight = centerheight + intSelInfoTop;

//MessageBox.Show("Coordinates: " + centerwidth + ", " + centerheight, "Coordinates", MessageBoxButtons.OK);
Response.Write("the Widht and Height co-ordinates are (Width,Height)= ({0},{1})" + centerwidth + ","+ centerheight);

}

分类:C# 时间:2012-01-01 人气:0
本文关键词: OCR,MODI
分享到:

相关文章

  • 为什么OCR(MODI.MiLANGUAGES.miLANG_ENGLISH,真,真)引起OCR运行错误? 2012-10-01

    我使用MODI阅读TIFF图像,做我需要做的文字. 有些图像做工精细,然后其他的TIFF图像总是会使方法, OCR(MODI.MiLANGUAGES.miLANG_ENGLISH,真,真) 失败. 我研究这一点,并尝试不同的变化,如在参数表中"假","假". 我也尝试过,而不是英语SYSDEFAULT但我仍然得到错误. 谁能告诉我,为什么它会失败在某些TIFF图像,而不是别人? 我做了一些研究,发现这样的回答: 一个可能的原因是MODI尝试过程中没有任何可识别文本的

  • 获取消息“从CD安装OCR”,试图扫描时。 2013-04-25

    我有一个利盟所有功能于一身. 当我试图扫描我得到的消息",从CD安装OCR". 这参考驱动程序CD. 我认为,MSE防火墙的问题. 如何设置我的扫描仪通过防火墙? --------------解决方案------------- 嗨朱迪, MSE不包括防火墙或任何类型的防火墙保护的 - 使得不能与Lexmark的问题. MSE依赖于Windows防火墙提供的保护类型,不会改变了Windows防火墙设置进行安装时. 我不相信,Windows防火墙将允许在Lexmark的所有其他功能除了扫描

  • OCR替代MODI 2014-01-05

    我最近一直在使用MODI的内置OCR功能捕获窗口的文本. 我用的是窗口句柄,并可以在任何区域获得文字或我能得到具体的文字,我想搜索的坐标. 它看起来像莫迪已经depricated,它不包含在Office 2010中,我们现在用的,所以我需要找到一个新的OCR选择. 是否有其他好的图书馆,我可以使用? --------------解决方案------------- 您可以使用莫迪在Office 2010中的最好方法是从SharePoint Designer中安装莫迪. 按照链接的详细信息http:

  • 如何OCR一个MODI.Document的特定区域? 2014-03-18

    我需要到OCR扫描文档的特定区域,我使用MODI(微软的文档影像COM对象). 我的代码目前OCR是整个页面(相当准确!),但我想针对网页的特定区域,其中的文本始终是静态的(订单号). 我怎样才能做到这一点? 这里是我的网页代码: MODI.Document md = new MODI.Document(); md.Create("c:\\temp\\mpk.tiff"); md.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, true, true); MOD

  • OCR,Word中,绿色波浪线间距,切正贴 2012-09-26

    好吧,这个问题在叙述是最好的形容. 首先,我OCR扫描.PDF使其搜索,不得不切出文本的能力. 第二,我砍从现在搜索.PDF的粘贴文本到一个由三列的Word文档. 三,粘贴在Word中显示在文本行的每一个单词的末尾绿色波浪线,因为它在.pdf文件存在. 第四,我可以手动在下划线的单词的第一个字母的前面马上删除修复. 这个词跳了线,然后要求我更换的空间. 反正来自动解决这个问题? 是否有一种特殊的剪切和粘贴,从而无需手动删除,然后重新插入空间? 使此:是这样的; adasdasdasdsa ads

  • Android版的tesseract OCR,JNI:在LCOM接到nullstring / googlecode上/的tesseract /安卓/ TessBaseAPI 2013-04-16

    的tesseract-Android的工具测试(测试项目,以确保一切都树立正确的)的作品. 我得到了我eng.traindeddata来自:http://tesseract-ocr.googlecode.com/files/eng.traineddata.gz(http://code.google.com/p/tesseract-ocr/wiki/ReadMe)但我想经营我自己的道路,这是刚刚初始化它时,仍然得到上述的错误......这是所有迄今为止我所做的一切. 有什么建议么? -------

  • Convertng使用ImageMagick,OCR,标有JavaScript的图像(EPS)互动网页 2013-06-13

    业务洞察力:我们在教育领域,我们有一个要求,自动标记的图像(EPS)的,转换成互动练习(使用HTML / SVG / JavaScript的),学生使用. 技术洞察力:分层 EPS文件是我们从pubishers得到. 而EPS文件应转换为两个PNG文件:[1.png]其中有标签文本只有[2.png]其他的一切,但标签文本. 然后[1.png]应该通过某些先进的OCR(?)程序被运行应输出与它们在图像中的位置(X,Y coords)使用沿所述标签文本. 然后HTML / JavaScript的可用

  • OCR,在PHP OCR-B字体? 2012-05-16

    我找了一个很好的解决方案解析OCR-B字体断从扫描仪送入一个PNG图像. 在发动机的任何提示? 在PHP --------------解决方案------------- 纯PHP解决方案可能无法使用. 我会建议使用GOCR http://jocr.sourceforge.net/和类似的东西,把它从PHP // do optical character recognition $command = '/usr/local/bin/gocr -i ' . escapeshellarg($png_f

  • “OCR运行错误”使用MODI 2003 C#时 2012-05-11

    我一直努力让MODI今天正常在所有的工作. 下面是我试图使用的代码(改编自维基百科条目MODI给出的VB. private void button1_Click( object sender, EventArgs e ) { string inputFile = @"C:\testImage.bmp"; textBox1.Text = GetTextFromImage( inputFile ); } private string GetTextFromImage( string fil

  • 我也正在寻求一个选项,以MODI运行Windows 7(64位)和Office 2010的一个音符时,简直是不够的文档管理,我们使用它的方式。 2013-10-11

    微软已经真正引起不小的问题,对于我们许多人谁依赖于MODI管理文档和图片,尤其是传真. 另一种方法是急需的,并会非常赞赏. 任何解决办法除了"只使用OneNote"可以理解的. OneNote的工作对于一些事情,但试图捕捉图像,OCR,然后复制到如Word或Publisher另一个程序时,它不是非常有用的. --------------解决方案------------- 在64位Windows中使用MODI MODI不会在64位Windows上运行. 我曾见过一个答复,而该人是能够在W

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 2.828 (s). 10 q(s)