使用 office2007 document imaging control 控件 做识别 OCR

原文:
http://www.devsource.com/article2/0,1895,2143124,00.asp 

首先确保的是你要装上这个组件Microsoft Office Document Imaging 12.0 Type Library

装上office2007默认是不装.(实际我只装了个visio 2007)

装好后添加引用这个com就可以了

然后他在识别英文方面还不错.实际用它识别了一下CSDN的验证码.成功率很低..这类都是需要我们先做一些滤波的动作的.
我把 language 换成中文后识别中文都是报异常.
以下是识别的核心代码

使用 office2007 document imaging control 控件 做识别 OCR  MODI.Document md  =   new  MODI.Document();
使用 office2007 document imaging control 控件 做识别 OCR            md.Create(Directory.GetCurrentDirectory() 
+   " \\SampleForOCR.tiff " );
使用 office2007 document imaging control 控件 做识别 OCR            md.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, 
true true );
使用 office2007 document imaging control 控件 做识别 OCR
使用 office2007 document imaging control 控件 做识别 OCR            MODI.Image image 
=  (MODI.Image)md.Images[ 0 ];
使用 office2007 document imaging control 控件 做识别 OCR            MODI.Layout layout 
=  image.Layout;
使用 office2007 document imaging control 控件 做识别 OCR
使用 office2007 document imaging control 控件 做识别 OCR            MODI.Word word;
使用 office2007 document imaging control 控件 做识别 OCR            StringBuilder sb 
=   new  StringBuilder();
使用 office2007 document imaging control 控件 做识别 OCR            
for  ( int  i  =   0 ; i  <  layout.Words.Count;i ++  )
使用 office2007 document imaging control 控件 做识别 OCR            
{
使用 office2007 document imaging control 控件 做识别 OCR                word 
= (MODI.Word)layout.Words[i];
使用 office2007 document imaging control 控件 做识别 OCR                sb.Append(word.Text);
使用 office2007 document imaging control 控件 做识别 OCR            }

sb.ToString就可以得到了
图片转成 tiff
使用 office2007 document imaging control 控件 做识别 OCR Bitmap bitmap  =   new  Bitmap( 100 100 );
使用 office2007 document imaging control 控件 做识别 OCR            bitmap.Save(
" somefilename " , ImageFormat.Tiff);
如何进行截屏呢?
拷屏.先把整个屏幕的图像拷过来(其它地方也会用到这个.比如做一个操作动作的外挂等)
使用 office2007 document imaging control 控件 做识别 OCR Graphics g  =  Graphics.FromImage(m_WindowDlg.m_objBitmap);
使用 office2007 document imaging control 控件 做识别 OCR            
//  Copy the screen into the bitmap object.
使用 office2007 document imaging control 控件 做识别 OCR
            g.CopyFromScreen( 0 0 0 0 new  Size(w, h));

指定区域是利用
另一个窗口来的..把这个窗口的透明属性opacity设为100%这样人家就看不到了.
然后利用 MouseDown 画出我们截屏的范围 和 mouseUP事件.
mouseUP后引发一个完成的事件.并通知座标大小
主要代码

使用 office2007 document imaging control 控件 做识别 OCR //  Make sure we clicked the mouse button and
使用 office2007 document imaging control 控件 做识别 OCR            
//    have a starting coordinate.
使用 office2007 document imaging control 控件 做识别 OCR
             if  (m_nStartX  !=   - 1 )
使用 office2007 document imaging control 控件 做识别 OCR            
{
使用 office2007 document imaging control 控件 做识别 OCR                
// Get the graphcis object from this window.
使用 office2007 document imaging control 控件 做识别 OCR
                Graphics g = Graphics.FromHwnd(Handle);
使用 office2007 document imaging control 控件 做识别 OCR
使用 office2007 document imaging control 控件 做识别 OCR                
// Check to see if we need to restore the
使用 office2007 document imaging control 控件 做识别 OCR                
//   screen from a previous rectangle draw.
使用 office2007 document imaging control 控件 做识别 OCR
                if (m_nLastX != -1)
使用 office2007 document imaging control 控件 做识别 OCR                
{
使用 office2007 document imaging control 控件 做识别 OCR                    
// Create a rectangle with which to clip.
使用 office2007 document imaging control 控件 做识别 OCR                    
//   Note that we are 3 pixels to the left
使用 office2007 document imaging control 控件 做识别 OCR                    
//   and 3 pixels to the right so that we
使用 office2007 document imaging control 控件 做识别 OCR                    
//   can take the width of the line into
使用 office2007 document imaging control 控件 做识别 OCR                    
//   account.
使用 office2007 document imaging control 控件 做识别 OCR
                    Rectangle rc = new Rectangle(m_nLastX-3, m_nLastY-3,
使用 office2007 document imaging control 控件 做识别 OCR                        m_nLastWidth
+6, m_nLastHeight+6);
使用 office2007 document imaging control 控件 做识别 OCR                    g.SetClip(rc);
使用 office2007 document imaging control 控件 做识别 OCR                    g.DrawImage(m_objBitmap, 
00);
使用 office2007 document imaging control 控件 做识别 OCR                    g.ResetClip();
使用 office2007 document imaging control 控件 做识别 OCR                }

使用 office2007 document imaging control 控件 做识别 OCR
使用 office2007 document imaging control 控件 做识别 OCR                
// Here we set some local variables just
使用 office2007 document imaging control 控件 做识别 OCR                
//   in case we have to swap the values.
使用 office2007 document imaging control 控件 做识别 OCR
                int nStartX = m_nStartX;
使用 office2007 document imaging control 控件 做识别 OCR                
int nStartY = m_nStartY;
使用 office2007 document imaging control 控件 做识别 OCR
使用 office2007 document imaging control 控件 做识别 OCR                
// Get and record our current mouse position.
使用 office2007 document imaging control 控件 做识别 OCR
                int nEndX = e.X;
使用 office2007 document imaging control 控件 做识别 OCR                
int nEndY = e.Y;
使用 office2007 document imaging control 控件 做识别 OCR
使用 office2007 document imaging control 控件 做识别 OCR                
// Calculate width and height.
使用 office2007 document imaging control 控件 做识别 OCR
                int nWidth = Math.Abs(nStartX - nEndX);
使用 office2007 document imaging control 控件 做识别 OCR                
int nHeight = Math.Abs(nStartY - nEndY);
使用 office2007 document imaging control 控件 做识别 OCR
使用 office2007 document imaging control 控件 做识别 OCR                
// We may need to swap values if user went
使用 office2007 document imaging control 控件 做识别 OCR                
//   left from the start position.
使用 office2007 document imaging control 控件 做识别 OCR
                if (nEndX < nStartX)
使用 office2007 document imaging control 控件 做识别 OCR                
{
使用 office2007 document imaging control 控件 做识别 OCR                    
int i = nStartX;
使用 office2007 document imaging control 控件 做识别 OCR                    nStartX 
= nEndX;
使用 office2007 document imaging control 控件 做识别 OCR                    nEndX 
= i;
使用 office2007 document imaging control 控件 做识别 OCR                }

使用 office2007 document imaging control 控件 做识别 OCR                
// We may need to swap values if user went
使用 office2007 document imaging control 控件 做识别 OCR                
//   up from the start position.
使用 office2007 document imaging control 控件 做识别 OCR
                if (nEndY < nStartY)
使用 office2007 document imaging control 控件 做识别 OCR                
{
使用 office2007 document imaging control 控件 做识别 OCR                    
int i = nStartY;
使用 office2007 document imaging control 控件 做识别 OCR                    nStartY 
= nEndY;
使用 office2007 document imaging control 控件 做识别 OCR                    nEndY 
= i;
使用 office2007 document imaging control 控件 做识别 OCR                }

使用 office2007 document imaging control 控件 做识别 OCR
使用 office2007 document imaging control 控件 做识别 OCR                
// Draw the rectangle.
使用 office2007 document imaging control 控件 做识别 OCR
                g.DrawRectangle(new Pen(Color.Black, 3),
使用 office2007 document imaging control 控件 做识别 OCR                    nStartX, nStartY, nWidth, nHeight);
使用 office2007 document imaging control 控件 做识别 OCR
使用 office2007 document imaging control 控件 做识别 OCR                
// Record the operation so that we can restore
使用 office2007 document imaging control 控件 做识别 OCR                
//   when the mouse moves, and also give values
使用 office2007 document imaging control 控件 做识别 OCR                
//   to the EndCapture method.
使用 office2007 document imaging control 控件 做识别 OCR
                m_nLastX = nStartX;
使用 office2007 document imaging control 控件 做识别 OCR                m_nLastY 
= nStartY;
使用 office2007 document imaging control 控件 做识别 OCR                m_nLastWidth 
= nWidth;
使用 office2007 document imaging control 控件 做识别 OCR                m_nLastHeight 
= nHeight;
g.DrawRectangle(new Pen(Color.Red, 1), 这个改成红色一个像素看起来更舒服,这个函数是鼠标一移动都会被调用的.

他的这个程序.还做了截屏.想用C#做截屏的也可以看一下它是什么做的.
附件 下载

你可能感兴趣的:(document)