• 2283阅读
  • 6回复

[游戏相关]西游天下答题图片自动识别与处理 [复制链接]

上一主题 下一主题
离线啊冲
 

只看楼主 倒序阅读 使用道具 楼主  发表于: 2014-06-07
我就不整理了  自个儿整理吧.. 识别部分的代码是朋友写的    

原始代码是 E   我转成了C而已    
另外请各位大侠嘴下积德 不要把E语言妖魔化
要看用的人


这段分析代码还有我家老包同志的功劳

复制代码
  1. /***********************************************************
  2. *  创建日期: 2010/04/01 22:36
  3. *  函数名称:
  4. *  函数功能:
  5. *  参数个数:
  6. *  返 回 值: void
  7. *  作    者: SmallWhite
  8. *  备    注: Game_Hook.cpp
  9. ***********************************************************/
  10. void WINAPI GetImageHook()//;  //答题图片hook
  11. {
  12. // 00479993  |.  8B4D EC       mov ecx,[local.5]
  13. // 00479996  |.  E8 25332800   call xytx.006FCCC0
  14. // 0047999B  |.  8B10          mov edx,dword ptr ds:[eax]
  15. // 0047999D  |.  68 80000000   push 80     hook这里 截取 edi
  16. // 004799A2  |.  68 80000000   push 80
  17. // 004799A7  |.  8BC8          mov ecx,eax
  18. // 004799A9  |.  8B42 18       mov eax,dword ptr ds:[edx+18]
  19. // 004799AC  |.  57            push edi
  20. // 004799AD  |.  FFD0          call eax                                 ;  007A30A0
  21. VMProtectBegin;
  22. DWORD dwOld;
  23. DWORD dwJmp=(DWORD)HookImgControl;
  24. dwJmp=dwJmp-CONST_ADDRESS_IMGHOOK-5;//跳转地址
  25. byte bJmp[]={0xe9,0,0,0,0};
  26. *(DWORD*)(bJmp+1)=dwJmp;
  27. VirtualProtect((LPVOID)CONST_ADDRESS_IMGHOOK,5,PAGE_EXECUTE_READWRITE,&dwOld);
  28. memcpy((LPVOID)CONST_ADDRESS_IMGHOOK,bJmp,5);
  29. VirtualProtect((LPVOID)CONST_ADDRESS_IMGHOOK,5,dwOld,&dwOld);
  30. VirtualProtect((LPVOID)CONST_ADDRESS_IMGNOP,6,PAGE_EXECUTE_READWRITE,&dwOld);//不让图片滚动
  31. byte bwreit[]={0xe9,0x5c,2,0,0,0x90};
  32. *(DWORD*)(bwreit+1)=*(DWORD*)(CONST_ADDRESS_IMGNOP+2)+1;//je 与 jmp滴区别 +1
  33. RtlCopyMemory((LPVOID)CONST_ADDRESS_IMGNOP,bwreit,6);
  34. VirtualProtect((LPVOID)CONST_ADDRESS_IMGNOP,6,dwOld,&dwOld);
  35. *(DWORD*)CONST_GAMECALL_SHOWWINDOW=(DWORD)hookgameshowwindow;
  36. VMProtectEnd;
  37. return;
  38. }
  39. //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  40. /***********************************************************
  41. *  创建日期: 2010/04/01 22:37
  42. *  函数名称:
  43. *  函数功能:
  44. *  参数个数:
  45. *  返 回 值: void
  46. *  作    者: SmallWhite
  47. *  备    注: Game_Hook.cpp
  48. ***********************************************************/
  49. __declspec(naked) void WINAPI HookImgControl()//;  //0424
  50. {
  51. __asm
  52. {
  53.   push ecx;
  54.   push edx;
  55.   push eax;
  56.   push ebx;
  57.   push edi;
  58.   push esi;
  59.   push esi;//画图指针    0424
  60.   call imgcontrl;
  61.   pop esi;
  62.   pop edi;
  63.   pop ebx;
  64.   pop eax;
  65.   pop edx;
  66.   pop ecx;
  67.   push 0x100;
  68.   mov ecx,CONST_ADDRESS_IMGHOOK;
  69.   add ecx,18;//直接跳走咯
  70.   jmp ecx;
  71. }
  72. }
  73. //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  74. /***********************************************************
  75. *  创建日期: 2010/04/01 22:40
  76. *  函数名称:
  77. *  函数功能:
  78. *  参数个数:
  79. *  返 回 值: void
  80. *  作    者: SmallWhite
  81. *  备    注: Game_Hook.cpp
  82. ***********************************************************/
  83. void WINAPI imgcontrl(byte *bbag)//;  //收到图片处理    0424
  84. {
  85. //  static int jj=0;
  86. //  jj++;
  87. //  static char szfile[256];
  88. //  wsprintfA(szfile,"d:\\点阵数据\\A%03d.dat",jj);
  89. //  MyWriteFile(szfile,(const byte*)bbag,256*256*2);
  90. VMProtectBegin;
  91. RecvImgInfo(bbag);
  92. // ImgSel(bbag);
  93. VMProtectEnd;
  94. return;
  95. }
  96. //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  97. /***********************************************************
  98. *  创建日期: 2010/05/17 20:22
  99. *  函数名称:
  100. *  函数功能:
  101. *  参数个数:
  102. *  返 回 值: void
  103. *  作    者: SmallWhite
  104. *  备    注: test.cpp
  105. ***********************************************************/
  106. void WINAPI RecvImgInfo(byte *bImg)//;  //收到哦啊图片
  107. {
  108. int cur=0;
  109. static byte bImgArr[256][256];
  110. for (int i=0;i<256;i++)
  111. {
  112.   for (int j=0;j<256;j++)
  113.   {
  114.    if (i<49 ||i>209 || j<49 ||j>209)
  115.    {
  116.     bImgArr[j]=IMG_COLOR_WHITE;//白色
  117.    }
  118.    else
  119.    {
  120.     if (bImg[cur]<40)
  121.     {
  122.      bImgArr[j]=IMG_COLOR_WHITE;//白色
  123.     }
  124.     else if (bImg[cur]<80)
  125.     {
  126.      bImgArr[j]=IMG_COLOR_YINBAI;//银白
  127.     }
  128.     else if (bImg[cur]<120)
  129.     {
  130.      bImgArr[j]=IMG_COLOR_QIANHUI;//浅灰
  131.     }
  132.     else if (bImg[cur]<160)
  133.     {
  134.      bImgArr[j]=IMG_COLOR_HUISE;//灰色
  135.     }
  136.     else if (bImg[cur]<200)
  137.     {
  138.      bImgArr[j]=IMG_COLOR_SHENHUI;//深灰
  139.     }
  140.     else
  141.     {
  142.      bImgArr[j]=IMG_COLOR_HEISE;//黑色
  143.     }
  144.    }
  145.    cur+=2;
  146.   }
  147. }
  148. VMProtectBegin;
  149. // printf("分析图片OVER\r\n");
  150. //读取出图片数据
  151. int x=HengXiangFenXi(bImgArr);
  152. int y=ZhongXiangFenXi(bImgArr);
  153. MyDbgPrintf("图片分析over x:%d y:%d   send point:%d,%d",y,x,
  154.     y-56,x-56);
  155. VMProtectEnd;
  156. DWORD dwCurPos=0;   //游戏图形画白线 开始
  157. WORD bZhi=0;
  158. for (int j=0;j<256;j++)//16384
  159. {
  160.   for (int i=0;i<256;i++)
  161.   {
  162.    if (bImgArr[j]!=IMG_COLOR_LVSE)
  163.    {
  164.     dwCurPos+=2;
  165.     continue;
  166.    }
  167.    *(WORD*)&bImg[dwCurPos]=0xffff;
  168.    dwCurPos+=2;
  169.   }
  170. }     //游戏图形画白线结束  有时间屏蔽掉
  171. VMProtectBegin;
  172. if (GAnswertype==ANSWER_ERRORTYPE)
  173. {
  174.   MyDbgPrintf("Error Answer Type");
  175.   return;
  176. }
  177. GameSend_AnswerQuestion(GAnswertype,y-56,x-56);
  178. if (GAnswertype==ANSWER_GAMEING)
  179. {
  180.   //  CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)GameIngAnswer_Thread,NULL,NULL,NULL);
  181. }
  182. GAnswertype=ANSWER_ERRORTYPE;
  183. VMProtectEnd;
  184. return;
  185. }
  186. //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  187. //新答题识别###########################################################################
  188. #define  IMG_COLOR_WHITE  1 //白色
  189. #define  IMG_COLOR_YINBAI 2 //银白
  190. #define  IMG_COLOR_QIANHUI 3 //浅灰
  191. #define  IMG_COLOR_HUISE  4 //灰色
  192. #define  IMG_COLOR_SHENHUI 5 //深灰
  193. #define  IMG_COLOR_HEISE  6 //黑色
  194. #define  IMG_COLOR_LANSE  7 //蓝色
  195. #define  IMG_COLOR_HONGSE 8 //红色
  196. #define  IMG_COLOR_LVSE  9 //绿色
  197. int dwBoGu=0;//波谷
  198. int dwZhongXian=0;//中线
  199. /*******************************************
  200. * 日  期:  2010/05/17 21:24
  201. * 类型名:
  202. * 作  者:  SmallWhite
  203. * 备  注:  
  204. *******************************************/
  205. typedef struct BODUAN//波段
  206. {
  207. int iFirstPint;//起始点
  208. int iDuanLen;//段长度
  209. }BODUAN,*PBODUAN;
  210. //******************************************
  211. /***********************************************************
  212. *  创建日期: 2010/05/17 21:21
  213. *  函数名称:
  214. *  函数功能:
  215. *  参数个数:
  216. *  返 回 值: BOOL
  217. *  作    者: SmallWhite
  218. *  备    注: test.cpp
  219. ***********************************************************/
  220. BOOL WINAPI FenDuanLvBo(byte *bZaoBo)//;  //分段滤波 (噪波)
  221. {
  222. BOOL bIsBo=TRUE;//是否波 = 真
  223. int imin=-1;
  224. int imax=0;
  225. BODUAN bdBoDuan[256]={0};//波段
  226. //  for (int i=0;i<256;i++)
  227. //  {
  228. //   bdBoDuan.iFirstPint=-1;
  229. //  }
  230. int iBoDuanNum=0;//波段成员数  段数
  231. // BODUAN bBo={0};//波..
  232. for (int x=0;x<256;x++)
  233. {
  234.   if (bZaoBo[x]!=0)
  235.   {
  236.    if (imin==-1)
  237.    {
  238.     imin=x;
  239.    }
  240.    imax=x;
  241.   }
  242. }
  243. // printf("min:%d max:%d\r\n",imin,imax);
  244. bdBoDuan[0].iFirstPint=imin;
  245. if (imin==-1)
  246. {
  247.   return FALSE;
  248. }
  249. for (int i=imin;i<=imax;i++)
  250. {
  251.   if (bZaoBo>0)
  252.   {
  253.    if (bIsBo)
  254.    {
  255.     bdBoDuan[iBoDuanNum].iDuanLen++;
  256.    }
  257.    else
  258.    {
  259.     bIsBo=TRUE;
  260.     iBoDuanNum++;
  261.     bdBoDuan[iBoDuanNum].iFirstPint=i;
  262.     bdBoDuan[iBoDuanNum].iDuanLen=1;
  263.    }
  264.   }
  265.   else
  266.   {
  267.    if (bIsBo==FALSE)
  268.    {
  269.     bdBoDuan[iBoDuanNum].iDuanLen++;
  270.    }
  271.    else
  272.    {
  273.     iBoDuanNum++;
  274.     bIsBo=FALSE;
  275.     bdBoDuan[iBoDuanNum].iFirstPint=i;
  276.     bdBoDuan[iBoDuanNum].iDuanLen=1;
  277.    }
  278.   }
  279. }
  280. iBoDuanNum++;
  281. // printf("波段成员数:%d\r\n",
  282. //    iBoDuanNum);
  283. //  for (int i=0;i<iBoDuanNum;i++)
  284. //  {
  285. //   printf("%d %d %d\r\n",i,bdBoDuan.iFirstPint,bdBoDuan.iDuanLen);
  286. //  }
  287. BOOL bIsLvBo=FALSE;//是否已滤波
  288. if (iBoDuanNum>1)
  289. {
  290.   int x=0,y=0;
  291.   for (int i=0;i<iBoDuanNum;i+=2)
  292.   {
  293.    x=i-1;
  294.    y=i+1;
  295.    if (bdBoDuan.iDuanLen>10)
  296.    {
  297.     continue;
  298.    }
  299.    if (bdBoDuan.iDuanLen<=5)
  300.    {
  301.     for (int iCurValue=bdBoDuan.iFirstPint-1;iCurValue<bdBoDuan.iFirstPint+bdBoDuan.iDuanLen;iCurValue++)
  302.     {
  303.      bZaoBo[iCurValue]=0;
  304.     }
  305.     bIsLvBo=TRUE;
  306.     bdBoDuan.iFirstPint=-1;
  307.     continue;
  308.    }
  309.    if (x>=0 &&bdBoDuan.iFirstPint!=-1)
  310.    {
  311.     if (bdBoDuan.iDuanLen<=bdBoDuan[x].iDuanLen)
  312.     {
  313.      for (int iCurValue=bdBoDuan.iFirstPint-1;iCurValue<bdBoDuan.iFirstPint+bdBoDuan.iDuanLen;iCurValue++)
  314.      {
  315.       bZaoBo[iCurValue]=0;
  316.      }
  317.      bIsLvBo=TRUE;
  318.      bdBoDuan.iFirstPint=-1;
  319.     }
  320.    }
  321.    if (y<iBoDuanNum-1 &&bdBoDuan.iFirstPint!=-1)
  322.    {
  323.     if (bdBoDuan.iDuanLen<=bdBoDuan[y].iDuanLen)
  324.     {
  325.      for (int iCurValue=bdBoDuan.iFirstPint-1;iCurValue<bdBoDuan.iFirstPint+bdBoDuan.iDuanLen;iCurValue++)
  326.      {
  327.       bZaoBo[iCurValue]=0;
  328.      }
  329.      bIsLvBo=TRUE;
  330.      bdBoDuan.iFirstPint=-1;
  331.     }
  332.    }
  333.   }
  334. }
  335. //  for (int i=0;i<256;i++)
  336. //  {
  337. //   printf("%d,",bZaoBo);
  338. //  }
  339. //  return FALSE;
  340. return bIsLvBo;
  341. }
  342. //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  343. /***********************************************************
  344. *  创建日期: 2010/05/17 20:55
  345. *  函数名称:
  346. *  函数功能:
  347. *  参数个数:
  348. *  返 回 值: DWORD
  349. *  作    者: SmallWhite
  350. *  备    注: test.cpp
  351. ***********************************************************/
  352. int WINAPI FenXi(int *dwLineArr)//;  //分析 (段点数组)
  353. {
  354. //生成燥波
  355. dwBoGu=0;
  356. dwZhongXian=0;
  357. int dwZaoBoMaxValue=0;//噪波最大值
  358. int dwLianPoint[8]={0};//连点 数组
  359. int dwLianPointNum=0;//连点数量
  360. int dwCurValue=0;//当前值
  361. byte bZaoBo[256]={0};//噪波
  362. for (int x=0;x<256;x++)
  363. {
  364.   dwLianPoint[0]=x-1;
  365.   dwLianPoint[1]=x-2;
  366.   dwLianPoint[2]=x+1;
  367.   dwLianPoint[3]=x+2;
  368.   dwLianPoint[4]=x-3;
  369.   dwLianPoint[5]=x-4;
  370.   dwLianPoint[6]=x+3;
  371.   dwLianPoint[7]=x+4;
  372.   dwLianPointNum=1;//连点数量 = 1
  373.   dwCurValue=dwLineArr[x];//当前值 = 段点数组 [x]
  374.   for (int i=0;i<8;i++)
  375.   {
  376.    if (dwLianPoint>=0 && dwLianPoint<256)
  377.    {
  378.     dwLianPointNum++;//连点数量 = 连点数量 + 1
  379.     dwCurValue+=dwLineArr[dwLianPoint];//当前值 = 当前值 + 段点数组 [连点 ]
  380.    }
  381.   }
  382.   bZaoBo[x]=dwCurValue/dwLianPointNum;//噪波 [x] = 当前值 \ 连点数量
  383.   if (bZaoBo[x]>dwZaoBoMaxValue)
  384.   {
  385.    dwZaoBoMaxValue=bZaoBo[x];
  386.   }
  387. }
  388. //断波补全
  389. for (int x=2;x<254;x++)
  390. {
  391.   if (bZaoBo[x]==0)
  392.   {
  393.    if (bZaoBo[x-1]!=0 && bZaoBo[x+1]!=0)
  394.    {
  395.     bZaoBo[x]=(bZaoBo[x-1]+bZaoBo[x+1])/2;
  396.    }
  397.    else if (bZaoBo[x-2]!=0&&bZaoBo[x+1]!=0)
  398.    {
  399.     bZaoBo[x]=(bZaoBo[x-2]+bZaoBo[x+1])/2;
  400.    }
  401.    else if (bZaoBo[x-1]!=0 &&bZaoBo[x+2]!=0)
  402.    {
  403.     bZaoBo[x]=(bZaoBo[x-1]+bZaoBo[x+2])/2;
  404.    }
  405.   }
  406. }
  407. //纵向滤波
  408. int dwZaoBoCha=10;//噪波差
  409. for (int x=0;x<256;x++)
  410. {
  411.   if (dwZaoBoMaxValue-bZaoBo[x]>dwZaoBoCha)
  412.   {
  413.    bZaoBo[x]=0;
  414.   }
  415. }
  416. //断波补全
  417. for (int x=2;x<254;x++)
  418. {
  419.   if (bZaoBo[x]==0)
  420.   {
  421.    if (bZaoBo[x-1]!=0&&bZaoBo[x+1]!=0)
  422.    {
  423.     bZaoBo[x]=(bZaoBo[x-1]+bZaoBo[x+1])/2;
  424.    }
  425.    else if (bZaoBo[x-2]!=0&&bZaoBo[x+1]!=0)
  426.    {
  427.     bZaoBo[x]=(bZaoBo[x-2]+bZaoBo[x+1])/2;
  428.    }
  429.    else if (bZaoBo[x-1]!=0 && bZaoBo[x+2]!=0)
  430.    {
  431.     bZaoBo[x]=(bZaoBo[x-1]+bZaoBo[x+2])/2;
  432.    }
  433.   }
  434. }
  435. //过滤断段  分段滤波
  436. if (FenDuanLvBo(bZaoBo))
  437. {
  438.   FenDuanLvBo(bZaoBo);
  439. }
  440. //平头过滤
  441. int z1=0;
  442. for (int x=0;x<256;x++)
  443. {
  444.   if (bZaoBo[x]!=0)
  445.   {
  446.    if (z1==0)
  447.    {
  448.     z1=bZaoBo[x];
  449.    }
  450.    else
  451.    {
  452.     if (bZaoBo[x]==z1)
  453.     {
  454.      for (int i=0;i<x;i++)
  455.      {
  456.       bZaoBo=0;
  457.      }
  458.     }
  459.     else
  460.     {
  461.      break;
  462.     }
  463.    }
  464.   }
  465.   else
  466.   {
  467.    if (z1!=0)
  468.    {
  469.     break;
  470.    }
  471.   }
  472. }
  473. z1=0;
  474. for (int x=255;x>=0;x--)
  475. {
  476.   if (bZaoBo[x]!=0)
  477.   {
  478.    if (z1==0)
  479.    {
  480.     z1=bZaoBo[x];
  481.    }
  482.    else
  483.    {
  484.     if (z1==bZaoBo[x])
  485.     {
  486.      for (int i=255;i>=x;i--)
  487.      {
  488.       bZaoBo=0;
  489.      }
  490.     }
  491.     else
  492.     {
  493.      break;
  494.     }
  495.    }
  496.   }
  497.   else if (z1!=0)
  498.   {
  499.    break;
  500.   }
  501. }
  502. //  for (int i=0;i<256;i++)
  503. //  {
  504. //   printf("%d,",bZaoBo);
  505. //  }
  506. //  printf("\r\n上面是早搏\r\n");
  507. //计算中线
  508. int imin=0;
  509. int imax=0;
  510. for (int x=0;x<256;x++)
  511. {
  512.   if (bZaoBo[x]!=0)
  513.   {
  514.    if (imin==0)
  515.    {
  516.     imin=x;
  517.    }
  518.    imax=x;
  519.   }
  520. }
  521. dwZhongXian=(imin+imax)/2;
  522. // printf("中线:%d\r\n",
  523. //   dwZhongXian);
  524. //计算波谷
  525. int y=0,x1=0,z2=0;
  526. z1=0;
  527. for (int x=0;x<256;x++)
  528. {
  529.   if (bZaoBo[x]!=0)
  530.   {
  531.    if (bZaoBo[x]>y)
  532.    {
  533.     y=bZaoBo[x];
  534.     x1=x;
  535.     z1=1;
  536.     z2=0;
  537.    }
  538.    else
  539.    {
  540.     if (bZaoBo[x]==y&&z1==1)
  541.     {
  542.      z2++;
  543.     }
  544.     else
  545.     {
  546.      z1=0;
  547.     }
  548.    }
  549.   }
  550. }
  551. dwBoGu=x1+z2/2;//波谷 = x1 + z2 ÷ 2
  552. //圆心微调
  553. int iGu5Value=0; //谷5值
  554. for (int x=dwBoGu-1;x<dwBoGu+2;x++)
  555. {
  556.   if (x>=0 && x<256)
  557.   {
  558.    iGu5Value+=bZaoBo[x];
  559.   }
  560. }
  561. iGu5Value/=5;
  562. int iZhong5Value=0;
  563. for (int x=dwZhongXian-1;x<dwZhongXian+2;x++)
  564. {
  565.   if (x>=0&&x<256)
  566.   {
  567.    iZhong5Value+=bZaoBo[x];
  568.   }
  569. }
  570. iZhong5Value/=5;
  571. int x=abs(iGu5Value-iZhong5Value);//x = 取绝对值 (谷5值 - 中5值)
  572. int iWeiTiao=0;
  573. if (abs(dwZhongXian-dwBoGu)<6)
  574. {
  575. // .如果 (单选框1.选中)
  576. // 微调结果 = 中线
  577. // .否则
  578. // 微调结果 = 波谷
  579.   iWeiTiao=dwZhongXian;
  580. }
  581. else
  582. {
  583.   if (abs(dwZhongXian-dwBoGu)<10 && x>2)
  584.   {
  585.    iWeiTiao=(dwBoGu+dwZhongXian)/2;
  586.   }
  587.   else
  588.   {
  589.    iWeiTiao=dwZhongXian;
  590.   }
  591. }
  592. MyDbgPrintf("波谷:%d 中线:%d 微调结果:%d\r\n",
  593.     dwBoGu,dwZhongXian,iWeiTiao);
  594. return iWeiTiao;
  595. }
  596. //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  597. /***********************************************************
  598. *  创建日期: 2010/05/17 20:44
  599. *  函数名称:
  600. *  函数功能:
  601. *  参数个数:
  602. *  返 回 值: void
  603. *  作    者: SmallWhite
  604. *  备    注: test.cpp
  605. ***********************************************************/
  606. int  WINAPI HengXiangFenXi(byte bImgInfo[256][256])//;  //横向分析
  607. {
  608. int dwLineArr[256]={0};//段点数组
  609. byte dwBasePointColor=0;//基准点颜色
  610. byte dwCurPointColor=0;//当前点颜色
  611. for (int x=1;x<254;x++)
  612. {
  613.   dwBasePointColor=bImgInfo[x][0];
  614.   for (int y=1;y<254;y++)
  615.   {
  616.    dwCurPointColor=bImgInfo[x][y];
  617.    if (dwCurPointColor!=dwBasePointColor)
  618.    {
  619.     dwBasePointColor=dwCurPointColor;
  620.     if (bImgInfo[x-1][y]==bImgInfo[x+1][y])
  621.     {
  622.      dwLineArr[x]=dwLineArr[x]+1;
  623.     }
  624.    }
  625.   }
  626. }
  627. //分析
  628. int x=FenXi(dwLineArr);
  629. for (int i=0;i<256;i++)
  630. {
  631.   bImgInfo[dwBoGu]=IMG_COLOR_LANSE;
  632. }
  633. for (int i=0;i<256;i++)
  634. {
  635.   bImgInfo[dwZhongXian]=IMG_COLOR_HONGSE;
  636. }
  637. for (int i=0;i<256;i++)
  638. {
  639.   bImgInfo[x]=IMG_COLOR_LVSE;
  640. }
  641. // printf("横向X:%d",x);
  642. return x;
  643. }
  644. //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  645. /***********************************************************
  646. *  创建日期: 2010/05/18 13:53
  647. *  函数名称:
  648. *  函数功能:
  649. *  参数个数:
  650. *  返 回 值: DWORD
  651. *  作    者: SmallWhite
  652. *  备    注: test.cpp
  653. ***********************************************************/
  654. int WINAPI ZhongXiangFenXi(byte bImgInfo[256][256])//;  //纵向分析
  655. {
  656. int dwLineArr[256]={0};//段点数组
  657. byte dwBasePointColor=0;//基准点颜色
  658. byte dwCurPointColor=0;//当前点颜色
  659. for (int y=1;y<254;y++)
  660. {
  661.   dwBasePointColor=bImgInfo[y][0];
  662.   for (int x=1;x<254;x++)
  663.   {
  664.    dwCurPointColor=bImgInfo[x][y];
  665.    if (dwCurPointColor!=dwBasePointColor)
  666.    {
  667.     dwBasePointColor=dwCurPointColor;
  668.     if (bImgInfo[x][y-1]==bImgInfo[x][y+1])
  669.     {
  670.      dwLineArr[y]=dwLineArr[y]+1;
  671.     }
  672.    }
  673.   }
  674. }
  675. //分析
  676. int y=FenXi(dwLineArr);
  677. for (int i=0;i<256;i++)
  678. {
  679.   bImgInfo[dwBoGu]=IMG_COLOR_LANSE;
  680. }
  681. for (int i=0;i<256;i++)
  682. {
  683.   bImgInfo[dwZhongXian]=IMG_COLOR_HONGSE;
  684. }
  685. for (int i=0;i<256;i++)
  686. {
  687.   bImgInfo[y]=IMG_COLOR_LVSE;
  688. }
  689. // printf("横向y:%d",y);
  690. return y;
  691. }
  692. //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

善者 慈悲心常在 无怨无恨 以苦为乐
默认压缩密码www.hifyl.com
文件分享密码问题:http://www.hifyl.com/read-htm-tid-4444.html
离线李侃

只看该作者 沙发  发表于: 2014-06-07
学习
技术为王,我辈在路上
离线yxuenong

只看该作者 板凳  发表于: 2015-06-21
这个必须顶
离线hello2013

只看该作者 地板  发表于: 2015-10-09
很好。支持冲哥。
离线sword3

只看该作者 4楼 发表于: 2015-11-19
能发下易语言的源码吗?
离线etfg000

只看该作者 5楼 发表于: 2016-06-10
好东西,谢谢分享
离线yuyou

只看该作者 6楼 发表于: 08-08
快速回复
限100 字节
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
 
上一个 下一个