QQ验证码识别源代码(DOT NET1.1)

2019-04-15 16:31发布

C#代码: using System; namespace QQ { /// /// yzm 的摘要说明。 /// public class yzm { public yzm(public System.Drawing.Bitmap pic) { this.bp = pic; } /// /// 将一个int值存入到4个字节的字节数组(从高地址开始转换,最高地址的值以无符号整型参与"与运算") /// /// 要处理的int值 /// 存放信息的字符数组 public static void getbytesfromint(int thevalue, byte[] thebuff) { long v1=0; long v2=0; long v3=0; long v4=0; uint b1=(uint)4278190080; uint b2=(uint)16711680; uint b3=(uint)65280; uint b4=(uint)255; v1=thevalue & b1; v2=thevalue & b2; v3=thevalue & b3; v4=thevalue & b4; thebuff[0]=(byte)(v1>>24); thebuff[1]=(byte)(v2>>16); thebuff[2]=(byte)(v3>>8); thebuff[3]=(byte)v4; } /// /// 将一个ushort值存入到2个字节的字节数组(从高地址开始转换,最高地址的值以无符号整型参与"与运算") /// /// 要处理的ushort值 /// 存放信息的字符数组 public static void getbytesfromushort(ushort thevalue, byte[] thebuff) { ushort v1=0; ushort v2=0; ushort b1=(ushort)65280; ushort b2=(ushort)255; v1=(ushort)(thevalue & b1); v2=(ushort)(thevalue & b2); thebuff[0]=(byte)(v1>>8); thebuff[1]=(byte)(v2); } /// /// 将4个字节的字节数组转换成一个int值 /// /// 字符数组 /// public static int getintfrombyte(byte[] thebuff) { int jieguo=0; long mid=0; long m1=0; long m2=0; long m3=0; long m4=0; m1=(thebuff[0]<<24); m2=(thebuff[1]<<16); m3=(thebuff[2]<<8); m4=thebuff[3]; mid=m1+m2+m3+m4; jieguo=(int)mid; return jieguo; } /// /// 将2个字节的字节数组转换成一个ushort值 /// /// 字符数组 /// public static ushort getushortfrombyte(byte[] thebuff) { int jieguo1=0; jieguo1=(thebuff[0]<<8)+thebuff[1]; ushort jieguo=(ushort)jieguo1; return jieguo; } /// /// 将内存中的数据写入硬盘(保存特征库) /// /// 保存的位置 public static void writetofile(string thefile) { System.IO.FileStream fs = new System.IO.FileStream(thefile,System.IO.FileMode.OpenOrCreate,System.IO.FileAccess.ReadWrite); byte[] buff0=new byte[4]; getbytesfromint(datanum,buff0); fs.Write(buff0,0,4); for(int ii=0;ii /// 从文件中读取信息,并保存在内存中相应的位置 /// /// 特征库文件 public static void readfromfile(string thefile) { int allnum=0; byte[] buff=new byte[4]; System.IO.FileStream fs = new System.IO.FileStream(thefile,System.IO.FileMode.Open,System.IO.FileAccess.Read); fs.Read(buff,0,4); allnum=getintfrombyte(buff); byte[] buff0=new byte[2]; for(int ii=0;ii /// 验证码图片 /// public System.Drawing.Bitmap bp =new System.Drawing.Bitmap(49,20); /// /// 特征库的长度 /// public static int datanum=0; /// /// 特征库数据 /// public static ushort[,] datap=new ushort[100000,20]; /// /// 长度与高度 /// public static byte[,] dataxy=new byte[100000,2]; /// /// 对应的字符 /// public static byte[] datachar=new byte[100000]; /// /// 等待处理的数据 /// public ushort[] datapic=new ushort[20]; /// /// 有效长度 /// public byte xlpic=0; /// /// 有效宽度 /// public byte ylpic=0; /// /// 检索特征库中存在的记录 /// public string getchar() { //如果查找不到,就返回空串 string jieguo=""; for(int ii=0;ii /// 检查特征库中是否已经存在相关记录 /// bool ischardatain() { bool jieguo=false; for(int ii=0;ii1 || System.Math.Abs(dataxy[ii,1]-ylpic)>1) { continue; } for(int jj=0;jj<20;jj++) { if(datap[ii,jj]!=datapic[jj]) { notsamenum++; } } if(notsamenum<4) { string asdasd=((char)datachar[ii]).ToString(); return true; } } return jieguo; } /// /// 添加到特征库中,并暂时将对应的字符置为空格以待人工识别 /// void adddatawithnullchar() { if(this.ischardatain()) { return; } for(int ii=0;ii<20;ii++) { datap[datanum,ii]=this.datapic[ii]; } //暂时将对应的字符置为空格以待人工识别 datachar[datanum]=32; dataxy[datanum,0]=this.xlpic; dataxy[datanum,1]=this.ylpic; datanum++; } /// /// 检查验证码图片是否能分成4个部分,如果可以就检查4个字符在特征库中是否已经存在,如果不存在, /// 就添加到特征库中,并暂时将对应的字符置为空格以待人工识别 /// public void writetodata() { bool[,] picpixel=new bool[49,20]; for(int ii=0;ii<49;ii++) { for(int jj=0;jj<20;jj++) { if(bp.GetPixel(ii,jj).GetBrightness()<0.999) { picpixel[ii,jj]=true; } } } int[] index=new int[8]; int indexnum=0; bool black=false; for(int ii=0;ii<49;ii++) { bool haveblack=false; for(int jj=0;jj<20;jj++) { if(picpixel[ii,jj]) { haveblack=true; break; } } if(haveblack && black==false) { index[indexnum]=ii; indexnum++; black=true; } if(!haveblack && black) { index[indexnum]=ii; indexnum++; black=false; } } if(indexnum<7) { return; } if(indexnum==7) { index[7]=49; } //**** for(int ii=0;ii<4;ii++) { int x1=index[ii*2]; int x2=index[ii*2+1]; int y1=0,y2=19; bool mb=false; for(int jj=0;jj<20;jj++) { for(int kk=x1;kk=0;jj--) { for(int kk=x1;kk16) { continue; } this.ylpic=(byte)(y2-y1+1); int ys=-1; ushort[] addin=new ushort[]{1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768}; for(int jj=y1;jj<=y2;jj++) { ys++; int xs=-1; for(int kk=x1;kk /// 识别图片 /// /// 返回识别结果(如果返回的字符串长度小于4就说明识别失败) public string ocrpic() { string jieguo=""; bool[,] picpixel=new bool[49,20]; for(int ii=0;ii<49;ii++) { for(int jj=0;jj<20;jj++) { if(bp.GetPixel(ii,jj).GetBrightness()<0.999) { picpixel[ii,jj]=true; } } } int[] index=new int[8]; int indexnum=0; bool black=false; for(int ii=0;ii<49;ii++) { bool haveblack=false; for(int jj=0;jj<20;jj++) { if(picpixel[ii,jj]) { haveblack=true; break; } } if(haveblack && black==false) { index[indexnum]=ii; indexnum++; black=true; } if(!haveblack && black) { index[indexnum]=ii; indexnum++; black=false; } } if(indexnum<7) { return jieguo; } if(indexnum==7) { index[7]=49; } //**** for(int ii=0;ii<4;ii++) { int x1=index[ii*2]; int x2=index[ii*2+1]; int y1=0,y2=19; bool mb=false; for(int jj=0;jj<20;jj++) { for(int kk=x1;kk=0;jj--) { for(int kk=x1;kk16) { continue; } this.ylpic=(byte)(y2-y1+1); int ys=-1; ushort[] addin=new ushort[]{1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768}; for(int jj=y1;jj<=y2;jj++) { ys++; int xs=-1; for(int kk=x1;kk
VB.NET代码: Imports System '/ '/ yzm 的摘要说明。 '/ Public Class yzm Public Sub New(__unknown As __unknown) Dim pic As System.Drawing.Bitmap ' 'ToDo: Error processing original source shown below ' ' '------------^--- Syntax error: 'identifier' expected ' 'ToDo: Error processing original source shown below ' ' '--------------------------------------------^--- Syntax error: ';' expected If (True) Then Me.bp = pic End If '/ '/ 将一个int值存入到4个字节的字节数组(从高地址开始转换,最高地址的值以无符号整型参与"与运算") '/ '/ 要处理的int值 '/ 存放信息的字符数组 Dim getbytesfromint As ' 'ToDo: Error processing original source shown below ' ' '---------------^--- GenCode(token): unexpected token type Dim thebuff() As Byte ' 'ToDo: Error processing original source shown below ' ' '-^--- expression expected ' 'ToDo: Error processing original source shown below ' ' '--------^--- expression expected ' 'ToDo: Error processing original source shown below ' ' '-----------------------------------^--- Syntax error: ';' expected ' 'ToDo: Error processing original source shown below ' ' '----------------------------------------^--- Syntax error: '.' expected ' 'ToDo: Error processing original source shown below ' ' '------------------------------------------------^--- Syntax error: ';' expected ' 'ToDo: Error processing original source shown below ' ' '----------------------------------------------------------------^--- Syntax error: ';' expected If (True) Then Dim v1 As Long = 0 Dim v2 As Long = 0 Dim v3 As Long = 0 Dim v4 As Long = 0 Dim b1 As System.UInt32 = CType(, System.UInt32) 'ToDo: Unsigned Integers not supported ' 'ToDo: Error processing original source shown below ' ' '---------------^--- Unable to cast object of type 'CSToVBLib.UIntToken' to type 'CSToVBLib.IntToken'. 'ToDo: Unsigned Integers not supported Dim b2 As System.UInt32 = CType(16711680, System.UInt32) 'ToDo: Unsigned Integers not supported 'ToDo: Unsigned Integers not supported Dim b3 As System.UInt32 = CType(65280, System.UInt32) 'ToDo: Unsigned Integers not supported 'ToDo: Unsigned Integers not supported Dim b4 As System.UInt32 = CType(255, System.UInt32) 'ToDo: Unsigned Integers not supported 'ToDo: Unsigned Integers not supported v1 = thevalue And b1 v2 = thevalue And b2 v3 = thevalue And b3 v4 = thevalue And b4 thebuff(0) = CByte(Machine.Shift.Right(v1, 24)) thebuff(1) = CByte(Machine.Shift.Right(v2, 16)) thebuff(2) = CByte(Machine.Shift.Right(v3, 8)) thebuff(3) = CByte(v4) End If '/ '/ 将一个ushort值存入到2个字节的字节数组(从高地址开始转换,最高地址的值以无符号整型参与"与运算") '/ '/ 要处理的ushort值 '/ 存放信息的字符数组 Dim getbytesfromushort As ' 'ToDo: Error processing original source shown below ' ' '---------------^--- GenCode(token): unexpected token type Dim thebuff() As Byte ' 'ToDo: Error processing original source shown below ' ' '-^--- expression expected ' 'ToDo: Error processing original source shown below ' ' '--------^--- expression expected ' 'ToDo: Error processing original source shown below ' ' '--------------------------------------^--- Syntax error: ';' expected ' 'ToDo: Error processing original source shown below ' ' '----------------------------------------------^--- Syntax error: '.' expected ' 'ToDo: Error processing original source shown below ' ' '------------------------------------------------------^--- Syntax error: ';' expected ' 'ToDo: Error processing original source shown below ' ' '----------------------------------------------------------------------^--- Syntax error: ';' expected If (True) Then Dim v1 As System.UInt16 = 0 'ToDo: Unsigned Integers not supported Dim v2 As System.UInt16 = 0 'ToDo: Unsigned Integers not supported Dim b1 As System.UInt16 = CType(65280, System.UInt16) 'ToDo: Unsigned Integers not supported 'ToDo: Unsigned Integers not supported Dim b2 As System.UInt16 = CType(255, System.UInt16) 'ToDo: Unsigned Integers not supported 'ToDo: Unsigned Integers not supported v1 = CType(thevalue And b1, System.UInt16) 'ToDo: Unsigned Integers not supported v2 = CType(thevalue And b2, System.UInt16) 'ToDo: Unsigned Integers not supported thebuff(0) = CByte(Machine.Shift.Right(v1, 8)) thebuff(1) = CByte(v2) End If '/ '/ 将4个字节的字节数组转换成一个int值 '/ '/ 字符数组 '/ Dim getintfrombyte As Integer Byte() ' 'ToDo: Error processing original source shown below ' ' '-^--- expression expected ' 'ToDo: Error processing original source shown below ' ' '--------^--- expression expected ' 'ToDo: Error processing original source shown below ' ' '---------------------------------^--- Syntax error: ';' expected ' 'ToDo: Error processing original source shown below ' ' '--------------------------------------^--- Syntax error: '.' expected ' 'ToDo: Error processing original source shown below ' ' '-----------------------------------------^--- Syntax error: ')' expected ' 'ToDo: Error processing original source shown below ' ' '------------------------------------------------^--- Syntax error: ';' expected If (True) Then Dim jieguo As Integer = 0 Dim mid As Long = 0 Dim m1 As Long = 0 Dim m2 As Long = 0 Dim m3 As Long = 0 Dim m4 As Long = 0 m1 = Machine.Shift.Left(thebuff(0), 24) m2 = Machine.Shift.Left(thebuff(1), 16) m3 = Machine.Shift.Left(thebuff(2), 8) m4 = thebuff(3) mid = m1 + m2 + m3 + m4 jieguo = CInt(mid) Return jieguo End If '/ '/ 将2个字节的字节数组转换成一个ushort值 '/ '/ 字符数组 '/ Dim getushortfrombyte As System.UInt16 'ToDo: Unsigned Integers not supported Byte() ' 'ToDo: Error processing original source shown below ' ' '-^--- expression expected ' 'ToDo: Error processing original source shown below ' ' '--------^--- expression expected ' 'ToDo: Error processing original source shown below ' ' '---------------------------------------^--- Syntax error: ';' expected ' 'ToDo: Error processing original source shown below ' ' '--------------------------------------------^--- Syntax error: '.' expected ' 'ToDo: Error processing original source shown below ' ' '-----------------------------------------------^--- Syntax error: ')' expected ' 'ToDo: Error processing original source shown below ' ' '------------------------------------------------------^--- Syntax error: ';' expected If (True) Then Dim jieguo1 As Integer = 0 jieguo1 = Machine.Shift.Left(thebuff(0), 8) + thebuff(1) Dim jieguo As System.UInt16 = CType(jieguo1, System.UInt16) 'ToDo: Unsigned Integers not supported 'ToDo: Unsigned Integers not supported Return jieguo End If '/ '/ 将内存中的数据写入硬盘(保存特征库) '/ '/ 保存的位置 Dim writetofile As ' 'ToDo: Error processing original source shown below ' ' '---------------^--- GenCode(token): unexpected token type ' 'ToDo: Error processing original source shown below ' ' '-^--- expression expected ' 'ToDo: Error processing original source shown below ' ' '--------^--- expression expected ' 'ToDo: Error processing original source shown below ' ' '-------------------------------^--- Syntax error: ';' expected ' 'ToDo: Error processing original source shown below ' ' '---------------------------------------^--- Syntax error: '.' expected ' 'ToDo: Error processing original source shown below ' ' '----------------------------------------------^--- Syntax error: ';' expected If (True) Then Dim fs As New System.IO.FileStream(thefile, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.ReadWrite) Dim buff0(4) As Byte getbytesfromint(datanum, buff0) fs.Write(buff0, 0, 4) Dim ii As Integer For ii = 0 To datanum - 1 Dim jj As Integer For jj = 0 To 19 Dim buff(2) As Byte getbytesfromushort(datap(ii, jj), buff) fs.Write(buff, 0, 2) Next jj fs.WriteByte(dataxy(ii, 0)) fs.WriteByte(dataxy(ii, 1)) fs.WriteByte(datachar(ii)) Next ii fs.Close() End If '/ '/ 从文件中读取信息,并保存在内存中相应的位置 '/ '/ 特征库文件 Dim readfromfile As ' 'ToDo: Error processing original source shown below ' ' '---------------^--- GenCode(token): unexpected token type ' 'ToDo: Error processing original source shown below ' ' '-^--- expression expected ' 'ToDo: Error processing original source shown below ' ' '--------^--- expression expected ' 'ToDo: Error processing original source shown below ' ' '--------------------------------^--- Syntax error: ';' expected ' 'ToDo: Error processing original source shown below ' ' '----------------------------------------^--- Syntax error: '.' expected ' 'ToDo: Error processing original source shown below ' ' '-----------------------------------------------^--- Syntax error: ';' expected If (True) Then Dim allnum As Integer = 0 Dim buff(4) As Byte Dim fs As New System.IO.FileStream(thefile, System.IO.FileMode.Open, System.IO.FileAccess.Read) fs.Read(buff, 0, 4) allnum = getintfrombyte(buff) Dim buff0(2) As Byte Dim ii As Integer For ii = 0 To allnum - 1 Dim jj As Integer For jj = 0 To 19 fs.Read(buff0, 0, 2) datap(ii, jj) = getushortfrombyte(buff0) Next jj fs.Read(buff0, 0, 1) dataxy(ii, 0) = buff0(0) fs.Read(buff0, 0, 1) dataxy(ii, 1) = buff0(0) fs.Read(buff0, 0, 1) datachar(ii) = buff0(0) Next ii datanum = allnum fs.Close() End If '/ '/ 验证码图片 '/ Dim bp As New System.Drawing.Bitmap(49, 20) ' 'ToDo: Error processing original source shown below ' ' '-^--- expression expected '/ '/ 特征库的长度 '/ Dim datanum As Integer = 0 ' 'ToDo: Error processing original source shown below ' ' '-^--- expression expected ' 'ToDo: Error processing original source shown below ' ' '--------^--- expression expected '/ '/ 特征库数据 '/ Dim datap(100000, 20) As System.UInt16 'ToDo: Unsigned Integers not supported ' 'ToDo: Error processing original source shown below ' ' '-^--- expression expected ' 'ToDo: Error processing original source shown below ' ' '--------^--- expression expected '/ '/ 长度与高度 '/ Dim dataxy(100000, 2) As Byte ' 'ToDo: Error processing original source shown below ' ' '-^--- expression expected ' 'ToDo: Error processing original source shown below ' ' '--------^--- expression expected '/ '/ 对应的字符 '/ Dim datachar(100000) As Byte ' 'ToDo: Error processing original source shown below ' ' '-^--- expression expected ' 'ToDo: Error processing original source shown below ' ' '--------^--- expression expected '/ '/ 等待处理的数据 '/ Dim datapic(20) As System.UInt16 'ToDo: Unsigned Integers not supported ' 'ToDo: Error processing original source shown below ' ' '-^--- expression expected '/ '/ 有效长度 '/ Dim xlpic As Byte = 0 ' 'ToDo: Error processing original source shown below ' ' '-^--- expression expected '/ '/ 有效宽度 '/ Dim ylpic As Byte = 0 ' 'ToDo: Error processing original source shown below ' ' '-^--- expression expected '/ '/ 检索特征库中存在的记录 '/ Dim getchar As String ' 'ToDo: Error processing original source shown below ' ' '-^--- expression expected ' 'ToDo: Error processing original source shown below ' ' '----------------------^--- Syntax error: ';' expected ' 'ToDo: Error processing original source shown below ' ' '-----------------------^--- expression expected If (True) Then ' 'ToDo: Error processing original source shown below ' ' '-^--- Syntax error: ';' expected '如果查找不到,就返回空串 Dim jieguo As String = "" Dim ii As Integer For ii = 0 To datanum - 1 '统计一共有多少行的像素有差异,如果在4行以内就认为是存在该记录 '这种方法比较原始,但比较适合多线程时的运行,因为程序只进行简单的逻辑比较 '如果能够收集更多的特征库,识别率可以达到80%以上 '(此时可能需要将特征库的容量提高到15W个或以上) '当然也可以改进品配算法(如使用关键点品配),以用较少的特征库达到较高的识别率,但 '那样有比较大的机会造成识别错误并且多线程时占用较多CPU时间。 Dim notsamenum As Integer = 0 If dataxy(ii, 0) <> xlpic Or dataxy(ii, 1) <> ylpic Then GoTo ContinueFor1 End If Dim jj As Integer For jj = 0 To 19 If datap(ii, jj) <> datapic(jj) Then notsamenum += 1 End If ContinueFor1: Next jj If notsamenum < 4 Then Dim cj As Char = CChar(datachar(ii)) Return cj.ToString() End If ContinueFor1: Next ii Return jieguo End If '/ '/ 检查特征库中是否已经存在相关记录 '/ Dim ischardatain As Boolean ' 'ToDo: Error processing original source shown below ' ' '------------------^--- Syntax error: ';' expected ' 'ToDo: Error processing original source shown below ' ' '-------------------^--- expression expected If (True) Then ' 'ToDo: Error processing original source shown below ' ' '-^--- Syntax error: ';' expected Dim jieguo As Boolean = False Dim ii As Integer For ii = 0 To datanum - 1 '统计一共有多少行的像素有差异,如果在4行以内就认为是存在该记录 '这种方法比较原始,但比较适合多线程时的运行,因为程序只进行简单的逻辑比较 '如果能够收集更多的特征库,识别率可以达到80%以上 '(此时可能需要将特征库的容量提高到15W个或以上) '当然也可以改进品配算法(如使用关键点品配),以用较少的特征库达到较高的识别率,但 '那样有比较大的机会造成识别错误并且多线程时占用较多CPU时间。 Dim notsamenum As Integer = 0 If System.Math.Abs((dataxy(ii, 0) - xlpic)) > 1 Or System.Math.Abs((dataxy(ii, 1) - ylpic)) > 1 Then GoTo ContinueFor1 End If Dim jj As Integer For jj = 0 To 19 If datap(ii, jj) <> datapic(jj) Then notsamenum += 1 End If ContinueFor1: Next jj If notsamenum < 4 Then Dim asdasd As String = CChar(datachar(ii)).ToString() Return True End If ContinueFor1: Next ii Return jieguo End If '/ '/ 添加到特征库中,并暂时将对应的字符置为空格以待人工识别 '/ Dim adddatawithnullchar As ' 'ToDo: Error processing original source shown below ' ' '-^--- GenCode(token): unexpected token type ' 'ToDo: Error processing original source shown below ' ' '-------------------------^--- Syntax error: ';' expected ' 'ToDo: Error processing original source shown below ' ' '--------------------------^--- expression expected If (True) Then ' 'ToDo: Error processing original source shown below ' ' '-^--- Syntax error: ';' expected If Me.ischardatain() Then Return End If Dim ii As Integer For ii = 0 To 19 datap(datanum, ii) = Me.datapic(ii) Next ii '暂时将对应的字符置为空格以待人工识别 datachar(datanum) = 32 dataxy(datanum, 0) = Me.xlpic dataxy(datanum, 1) = Me.ylpic datanum += 1 End If '/ '/ 检查验证码图片是否能分成4个部分,如果可以就检查4个字符在特征库中是否已经存在,如果不存在, '/ 就添加到特征库中,并暂时将对应的字符置为空格以待人工识别 '/ Dim writetodata As ' 'ToDo: Error processing original source shown below ' ' '--------^--- GenCode(token): unexpected token type ' 'ToDo: Error processing original source shown below ' ' '-^--- expression expected ' 'ToDo: Error processing original source shown below ' ' '------------------------^--- Syntax error: ';' expected ' 'ToDo: Error processing original source shown below ' ' '-------------------------^--- expression expected If (True) Then ' 'ToDo: Error processing original source shown below ' ' '-^--- Syntax error: ';' expected Dim picpixel(49, 20) As Boolean Dim ii As Integer For ii = 0 To 48 Dim jj As Integer For jj = 0 To 19 If bp.GetPixel(ii, jj).GetBrightness() < 0.999 Then picpixel(ii, jj) = True End If Next jj Next ii Dim index(8) As Integer Dim indexnum As Integer = 0 Dim black As Boolean = False Dim ii As Integer For ii = 0 To 48 Dim haveblack As Boolean = False Dim jj As Integer For jj = 0 To 19 If picpixel(ii, jj) Then haveblack = True Exit For End If Next jj If haveblack And black = False Then index(indexnum) = ii indexnum += 1 black = True End If If Not haveblack And black Then index(indexnum) = ii indexnum += 1 black = False End If Next ii If indexnum < 7 Then Return End If If indexnum = 7 Then index(7) = 49 End If '**** Dim ii As Integer For ii = 0 To 3 Dim x1 As Integer = index((ii * 2)) Dim x2 As Integer = index((ii * 2 + 1)) Dim y1 As Integer = 0 Dim y2 As Integer = 19 Dim mb As Boolean = False Dim jj As Integer For jj = 0 To 19 Dim kk As Integer For kk = x1 To x2 - 1 If picpixel(kk, jj) Then mb = True Exit For End If Next kk If mb Then y1 = jj Exit For End If Next jj mb = False Dim jj As Integer For jj = 19 To 0 Step -1 Dim kk As Integer For kk = x1 To x2 - 1 If picpixel(kk, jj) Then mb = True Exit For End If Next kk If mb Then y2 = jj Exit For End If Next jj '**以上是获取有效区域的范围 Dim jj As Integer For jj = 0 To 19 Me.datapic(jj) = 0 Me.datapic(jj) = 0 Next jj Me.xlpic = CByte(x2 - x1) '如果字符宽度超过16个像素就不予处理 If xlpic > 16 Then GoTo ContinueFor1 End If Me.ylpic = CByte(y2 - y1 + 1) Dim ys As Integer = - 1 Dim addin() As System.UInt16 = {1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768} 'ToDo: Unsigned Integers not supported Dim jj As Integer For jj = y1 To y2 ys += 1 Dim xs As Integer = - 1 Dim kk As Integer For kk = x1 To x2 - 1 xs += 1 If picpixel(kk, jj) Then Me.datapic(ys) = CType(Me.datapic(ys) + addin(xs), System.UInt16) 'ToDo: Unsigned Integers not supported End If ContinueFor1: Next kk ContinueFor1: Next jj Me.adddatawithnullchar() ContinueFor1: Next ii End If '**** '/ '/ 识别图片 '/ '/ 返回识别结果(如果返回的字符串长度小于4就说明识别失败) Dim ocrpic As String ' 'ToDo: Error processing original source shown below ' ' '-^--- expression expected ' 'ToDo: Error processing original source shown below ' ' '---------------------^--- Syntax error: ';' expected ' 'ToDo: Error processing original source shown below ' ' '----------------------^--- expression expected If (True) Then ' 'ToDo: Error processing original source shown below ' ' '-^--- Syntax error: ';' expected ' 'ToDo: Error processing original source shown below 'System.Char[] '^--- Syntax error: '}' expected Dim jieguo As String = "" Dim picpixel(49, 20) As Boolean Dim ii As Integer For ii = 0 To 48 Dim jj As Integer For jj = 0 To 19 If bp.GetPixel(ii, jj).GetBrightness() < 0.999 Then picpixel(ii, jj) = True End If Next jj Next ii Dim index(8) As Integer Dim indexnum As Integer = 0 Dim black As Boolean = False Dim ii As Integer For ii = 0 To 48 Dim haveblack As Boolean = False Dim jj As Integer For jj = 0 To 19 If picpixel(ii, jj) Then haveblack = True Exit For End If Next jj If haveblack And black = False Then index(indexnum) = ii indexnum += 1 black = True End If If Not haveblack And black Then index(indexnum) = ii indexnum += 1 black = False End If Next ii If indexnum < 7 Then Return jieguo End If If indexnum = 7 Then index(7) = 49 End If '**** Dim ii As Integer For ii = 0 To 3 Dim x1 As Integer = index((ii * 2)) Dim x2 As Integer = index((ii * 2 + 1)) Dim y1 As Integer = 0 Dim y2 As Integer = 19 Dim mb As Boolean = False Dim jj As Integer For jj = 0 To 19 Dim kk As Integer For kk = x1 To x2 - 1 If picpixel(kk, jj) Then mb = True Exit For End If Next kk If mb Then y1 = jj Exit For End If Next jj mb = False Dim jj As Integer For jj = 19 To 0 Step -1 Dim kk As Integer For kk = x1 To x2 - 1 If picpixel(kk, jj) Then mb = True Exit For End If Next kk If mb Then y2 = jj Exit For End If Next jj '**以上是获取有效区域的范围 Dim jj As Integer For jj = 0 To 19 Me.datapic(jj) = 0 Me.datapic(jj) = 0 Next jj Me.xlpic = CByte(x2 - x1) '如果字符宽度超过16个像素就不予处理 If xlpic > 16 Then GoTo ContinueFor1 End If Me.ylpic = CByte(y2 - y1 + 1) Dim ys As Integer = - 1 Dim addin() As System.UInt16 = {1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768} 'ToDo: Unsigned Integers not supported Dim jj As Integer For jj = y1 To y2 ys += 1 Dim xs As Integer = - 1 Dim kk As Integer For kk = x1 To x2 - 1 xs += 1 If picpixel(kk, jj) Then Me.datapic(ys) = CType(Me.datapic(ys) + addin(xs), System.UInt16) 'ToDo: Unsigned Integers not supported End If ContinueFor1: Next kk ContinueFor1: Next jj jieguo = jieguo + Me.getchar() ContinueFor1: Next ii Return jieguo End If End Sub 'New End Class 'yzm