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