ScaleDetection.as 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766
  1. package com.imt.intimamedia.helpers
  2. {
  3. import com.imt.intimamedia.vo.ScaleCjVo;
  4. import flash.display.BitmapData;
  5. import flash.geom.Point;
  6. public class ScaleDetection
  7. {
  8. public function ScaleDetection()
  9. {
  10. }
  11. /**
  12. * Contantes
  13. */
  14. public static const MINIMUM_DISTANCE : int = 10;
  15. public static const TOLERANCE : int = 2;
  16. public static const TELEMED : String = "TELEMED";
  17. public static const YELLOW : String = "YELLOW";
  18. public static const GREEN : String = "GREEN";
  19. public static const BLUE : String = "BLUE";
  20. public static const BLUE_GREY : String = "BLUE_GREY";
  21. public static const BLUE_GREEN : String = "BLUE_GREEN";
  22. public static const ORANGE : String = "ORANGE";
  23. public static const ORANGE_GREY : String = "ORANGE_GREY";
  24. public function searchTicks( column : int, rowStart : int, rowEnd : int, bitmapData : BitmapData, redStart : uint, greenStart : uint, blueStart : uint, redEnd : uint, greenEnd : uint, blueEnd : uint, type : String, colorScale : String ) : Object
  25. {
  26. var color : uint = 0;
  27. var red : uint = 0;
  28. var green : uint = 0;
  29. var blue : uint = 0;
  30. var list : Array = new Array();
  31. var scaleVo : ScaleCjVo = new ScaleCjVo();
  32. scaleVo.type = type;
  33. scaleVo.color = colorScale;
  34. /**
  35. * Boucle qui parcourt les pixels + 2 de la ligne détéctée
  36. */
  37. for( var ordinate : uint = rowStart; ordinate < rowEnd+1; ordinate++ )
  38. {
  39. color = bitmapData.getPixel( column + 1, ordinate );
  40. red = color >> 16 & 0xFF;
  41. green = color >> 8 & 0xFF;
  42. blue = color & 0xFF;
  43. if( ordinate == 136 || ordinate == 229 || ordinate == 323 || ordinate == 417 || ordinate == 510 || ordinate == 604 || ordinate == 698 || ordinate == 791)
  44. trace("Test des paliers");
  45. if( ( red >= redStart && red <= redEnd ) &&
  46. ( green >= greenStart && green <= greenEnd ) &&
  47. ( blue >= blueStart && blue <= blueEnd ) )
  48. {
  49. list.push( ordinate );
  50. }
  51. }
  52. var distanceBetweenPoints : uint = list[ 1 ] - list[ 0 ];
  53. scaleVo.segment = distanceBetweenPoints;
  54. scaleVo.points = new Array();
  55. scaleVo.points.push( new Point( column, list[ 0 ] ) );
  56. scaleVo.points.push( new Point( column, list[ 1 ] ) );
  57. scaleVo.number = 2;
  58. for( var value : uint = 2; value < list.length; value++ )
  59. {
  60. if( list[ value ] - list[ value - 1 ] < distanceBetweenPoints + 2 &&
  61. list[ value ] - list[ value - 1 ] > distanceBetweenPoints - 2 )
  62. {
  63. scaleVo.points.push( new Point( column, list[ value ] ) );
  64. scaleVo.number++;
  65. }
  66. }
  67. scaleVo.start = scaleVo.points[ 0 ];
  68. scaleVo.end = scaleVo.points[ scaleVo.points.length - 1 ];
  69. scaleVo.distance = scaleVo.end.y - scaleVo.start.y;
  70. return scaleVo;
  71. }
  72. /**
  73. * Recherche d'une échelle Telemed
  74. */
  75. private function searchTelemed() : ScaleCjVo
  76. {
  77. var scaleVo : ScaleCjVo = new ScaleCjVo();
  78. return scaleVo;
  79. }
  80. /**
  81. * Recherche d'une échelle Telemed de Christophe
  82. */
  83. private function searchTelemedLive() : ScaleCjVo
  84. {
  85. var scaleVo : ScaleCjVo = new ScaleCjVo();
  86. return scaleVo;
  87. }
  88. /**
  89. * Recherche d'une échelle Terason
  90. */
  91. private function searchTerason( bitmapData : BitmapData ) : ScaleCjVo
  92. {
  93. var terasonDetected : Boolean = false;
  94. var terasonArray : Array = new Array();
  95. var scaleVo : ScaleCjVo = new ScaleCjVo();
  96. /**
  97. * Parcours de l'image à la recherche de couleurs spécifiques (Terrason, Telemed...)
  98. *
  99. * Boucle qui parcours les colonnes de l'image de la droite vers la gauche
  100. */
  101. for( var index : int = bitmapData.width ; index > 0; index-- )
  102. {
  103. /**
  104. * Boucle qui parcours les pixels pour chaque colonne du haut vers le bas de l'image
  105. */
  106. for( var ordinate : int = 0; ordinate < bitmapData.height; ordinate++ )
  107. {
  108. var color : uint = bitmapData.getPixel( index, ordinate );
  109. var red : uint = color >> 16 & 0xFF;
  110. var green : uint = color >> 8 & 0xFF;
  111. var blue : uint = color & 0xFF;
  112. /**
  113. * Détection d'un Terrasson
  114. */
  115. if( ( blue >= 246 && blue <= 255 ) &&
  116. ( red >= 0 && red <= 4 ) &&
  117. ( green >= 253 && green <= 255 ) )
  118. {
  119. var pointToAdd : Point = new Point();
  120. pointToAdd.x = index;
  121. pointToAdd.y = ordinate;
  122. terasonDetected = true;
  123. terasonArray.push( pointToAdd );
  124. }
  125. }
  126. }
  127. /**
  128. * Détection d'un Terrasson et recherche de l'échelle associée
  129. */
  130. if( terasonDetected )
  131. {
  132. var temporaryPoint : Point = null;
  133. var distanceCounter : int = 0;
  134. var totalDistances : Array = new Array();
  135. var tickCounter : int = 0;
  136. var arrayOfPoints : Array = new Array();
  137. var bestArray : Array = new Array();
  138. /**
  139. * Recherche du nombre de points par colonne
  140. */
  141. for( var terasonPointIndex : int = 0; terasonPointIndex < terasonArray.length; terasonPointIndex++ )
  142. {
  143. if( terasonPointIndex > 0 && terasonArray[ terasonPointIndex ].x != terasonArray[ terasonPointIndex - 1 ].x )
  144. {
  145. var obj : Object = new Object();
  146. obj.column = terasonArray[ terasonPointIndex - 1 ].x;
  147. obj.number = tickCounter;
  148. arrayOfPoints.push( obj )
  149. tickCounter = 1;
  150. } else {
  151. tickCounter++;
  152. }
  153. }
  154. var maxObject : Object = null;
  155. /**
  156. * Recherche de la colonne ayant le plus de points
  157. */
  158. for each( var object : Object in arrayOfPoints )
  159. {
  160. if( maxObject == null )
  161. {
  162. maxObject = object
  163. } else {
  164. if( object.number > maxObject.number )
  165. maxObject = object;
  166. }
  167. }
  168. /**
  169. * Création du tableau de points pour cette colonne
  170. */
  171. for each( var point : Point in terasonArray )
  172. {
  173. if( point.x == maxObject.column )
  174. {
  175. bestArray.push( point );
  176. }
  177. }
  178. /**
  179. * Création de l'objet de retour à partir de la meilleure colonne
  180. */
  181. scaleVo.color = "BLUE";
  182. scaleVo.type = "TERASON";
  183. scaleVo.points = bestArray;
  184. scaleVo.number = bestArray.length;
  185. scaleVo.segment = bestArray[ 1 ].y - bestArray[ 0 ].y;
  186. scaleVo.start = new Point( bestArray[ 0 ].x, bestArray[ 0 ].y );
  187. scaleVo.end = new Point( bestArray[ bestArray.length - 1 ].x, bestArray[ bestArray.length - 1 ].y );
  188. scaleVo.distance = scaleVo.end.y - scaleVo.start.y;
  189. /**
  190. * Détermination de la régularité des segments
  191. */
  192. var minimum : int = ( bestArray[ 1 ].y - bestArray[ 0 ].y ) - 15;
  193. var maximum : int = ( bestArray[ 1 ].y - bestArray[ 0 ].y ) + 15;
  194. var counterOfRegularity : int = 0;
  195. for( var indexReg : int = 0; indexReg < bestArray.length; indexReg++ )
  196. {
  197. if( indexReg > 0 )
  198. {
  199. if( bestArray[ 1 ].y - bestArray[ 0 ].y < maximum && bestArray[ 1 ].y - bestArray[ 0 ].y > minimum )
  200. {
  201. counterOfRegularity++;
  202. }
  203. }
  204. }
  205. scaleVo.regularity = ( counterOfRegularity / ( bestArray.length - 1 ) ) * 100;
  206. /**
  207. * Détermination de la taille de l'échelle
  208. */
  209. scaleVo.ratio = ( scaleVo.distance / bitmapData.height ) * 100;
  210. }
  211. return scaleVo;
  212. }
  213. /**
  214. * Recherche d'une échelle en nuance de gris
  215. */
  216. private function searchGreyScale() : ScaleCjVo
  217. {
  218. var scaleVo : ScaleCjVo = new ScaleCjVo();
  219. return scaleVo;
  220. }
  221. public function findScale( bitmapData : BitmapData ) : Object
  222. {
  223. var index : int = bitmapData.width;
  224. var ordinate : int = 0;
  225. var color : uint = 0;
  226. var red : uint = 0;
  227. var green : uint = 0;
  228. var blue : uint = 0;
  229. var grey : uint = 0;
  230. var terasonDetected : Boolean = false;
  231. var telemedDetected : Boolean = false;
  232. var telemedLiveDetected : Boolean = false;
  233. var greyScaleDetected : Boolean = false;
  234. var terasonArray : Array = new Array();
  235. var telemedYellowArray : Array = new Array();
  236. var greyScaleArray : Array = new Array();
  237. var startY : int = 0;
  238. var endY : int = 0;
  239. var distanceCounter : int = 0;
  240. var tickCounter : int = 0;
  241. var distanceFirstSegment : int = 0;
  242. var distanceSecondSegment : int = 0;
  243. var totalDistances : Array = new Array();
  244. var minimum : int = 0;
  245. var maximum : int = 0;
  246. var distance : int = 0;
  247. var start : Point = null;
  248. var end : Point = null;
  249. var scaleVo : ScaleCjVo = null;
  250. var temporaryPoint : Point = null;
  251. scaleVo = searchTerason( bitmapData );
  252. if( scaleVo.type == "TERASON" )
  253. return scaleVo;
  254. /**
  255. * Parcours de l'image à la recherche de couleurs spécifiques (Terrason, Telemed...)
  256. *
  257. * Boucle qui parcours les colonnes de l'image de la droite vers la gauche
  258. */
  259. for( index; index > 0; index-- )
  260. {
  261. /**
  262. * Boucle qui parcours les pixels pour chaque colonne du haut vers le bas de l'image
  263. */
  264. for( ordinate = 0; ordinate < bitmapData.height; ordinate++ )
  265. {
  266. color = bitmapData.getPixel( index, ordinate );
  267. red = color >> 16 & 0xFF;
  268. green = color >> 8 & 0xFF;
  269. blue = color & 0xFF;
  270. /**
  271. * Détection du jaune du Telemed de Christophe
  272. */
  273. if( ( blue >= 0 && blue <= 25 ) &&
  274. ( red >= 240 && red <= 255 ) &&
  275. ( green >= 240 && green <= 255 ) )
  276. {
  277. point = new Point();
  278. point.x = index;
  279. point.y = ordinate;
  280. telemedLiveDetected = true;
  281. telemedYellowArray.push( point );
  282. }
  283. }
  284. }
  285. if( telemedLiveDetected )
  286. {
  287. for each( var telemedPoint : Point in telemedYellowArray )
  288. {
  289. if( temporaryPoint != null )
  290. {
  291. minimum = ( telemedPoint.y - temporaryPoint.y ) - 15;
  292. maximum = ( telemedPoint.y - temporaryPoint.y ) + 15;
  293. if( distanceCounter < maximum && distanceCounter > minimum )
  294. {
  295. tickCounter++;
  296. totalDistances.push( distanceCounter );
  297. if( tickCounter == 3 )
  298. {
  299. var listYellow : Array = new Array();
  300. var lastPointYellow : Point;
  301. for each( var point : Point in telemedYellowArray )
  302. {
  303. if( telemedYellowArray[ 0 ].x == point.x )
  304. {
  305. listYellow.push( point );
  306. lastPointYellow = point;
  307. }
  308. }
  309. start = new Point( telemedYellowArray[ 0 ].x, telemedYellowArray[ 0 ].y );
  310. end = new Point( lastPointYellow.x, lastPointYellow.y );
  311. distance = end.y - start.y;
  312. scaleVo = new ScaleCjVo();
  313. scaleVo.color = YELLOW;
  314. scaleVo.type = TELEMED;
  315. scaleVo.points = listYellow;
  316. scaleVo.number = listYellow.length;
  317. scaleVo.segment = telemedYellowArray[ 1 ].y - telemedYellowArray[ 0 ].y;
  318. scaleVo.distance = distance;
  319. scaleVo.start = start;
  320. scaleVo.end = end;
  321. return scaleVo;
  322. }
  323. } else {
  324. tickCounter = 0;
  325. totalDistances = new Array();
  326. }
  327. distanceCounter = Math.abs( telemedPoint.y - temporaryPoint.y );
  328. }
  329. temporaryPoint = telemedPoint;
  330. }
  331. }
  332. /**
  333. * Parcours de l'image à la recherche de couleurs spécifiques (Telemed)
  334. *
  335. * Boucle qui parcours les colonnes de l'image de la droite vers la gauche
  336. */
  337. for( index = bitmapData.width; index > 0; index-- )
  338. {
  339. var numberOfPixels : int = 0;
  340. var firstPoint : int = -1;
  341. var colorScale : String;
  342. var redStart : uint;
  343. var greenStart : uint;
  344. var blueStart : uint;
  345. var redEnd : uint;
  346. var greenEnd : uint;
  347. var blueEnd : uint;
  348. var temp : int = 0;
  349. var lastPoint : Boolean = false;
  350. /**
  351. * Boucle qui parcours les pixels pour chaque colonne du haut vers le bas de l'image
  352. */
  353. for( ordinate = 0; ordinate < bitmapData.height; ordinate++ )
  354. {
  355. color = bitmapData.getPixel( index, ordinate );
  356. red = color >> 16 & 0xFF;
  357. green = color >> 8 & 0xFF;
  358. blue = color & 0xFF;
  359. lastPoint = false;
  360. if( index == 73 )
  361. trace("Affichage de la barre");
  362. /**
  363. * Détection de la couleur de l'échelle d'un TELEMED (vert)
  364. */
  365. if( ( red >= 140 && red <= 185 ) &&
  366. ( green >= 200 && green <= 235 ) &&
  367. ( blue >= 135 && blue <= 185 ) )
  368. {
  369. if( firstPoint == -1 )
  370. firstPoint = ordinate;
  371. numberOfPixels++;
  372. if( colorScale != GREEN )
  373. numberOfPixels = 1;
  374. redStart = 140;
  375. greenStart = 200;
  376. blueStart = 135;
  377. redEnd = 185;
  378. greenEnd = 235;
  379. blueEnd = 185;
  380. colorScale = GREEN;
  381. temp = 0;
  382. lastPoint = true;
  383. }
  384. /**
  385. * Détection de la couleur de l'échelle d'un TELEMED (bleue)
  386. */
  387. if( ( red >= 95 && red <= 115 ) &&
  388. ( green >= 105 && green <= 125 ) &&
  389. ( blue >= 140 && blue <= 190 ) )
  390. {
  391. if( firstPoint == -1 )
  392. firstPoint = ordinate;
  393. numberOfPixels++;
  394. if( colorScale != BLUE )
  395. numberOfPixels = 1;
  396. redStart = 100;
  397. greenStart = 110;
  398. blueStart = 140;
  399. redEnd = 115;
  400. greenEnd = 125;
  401. blueEnd = 185;
  402. colorScale = BLUE;
  403. temp = 0;
  404. lastPoint = true;
  405. }
  406. /**
  407. * Détection de la couleur de l'échelle d'un TELEMED (bleue sur fond gris clair)
  408. */
  409. if( ( red >= 115 && red <= 135 ) &&
  410. ( green >= 130 && green <= 150 ) &&
  411. ( blue >= 140 && blue <= 165 ) )
  412. {
  413. if( firstPoint == -1 )
  414. firstPoint = ordinate;
  415. numberOfPixels++;
  416. if( colorScale != BLUE_GREY )
  417. numberOfPixels = 1;
  418. redStart = 115;
  419. greenStart = 130;
  420. blueStart = 140;
  421. redEnd = 135;
  422. greenEnd = 150;
  423. blueEnd = 165;
  424. colorScale = BLUE_GREY;
  425. temp = 0;
  426. lastPoint = true;
  427. }
  428. /**
  429. * Détection de la couleur de l'échelle d'un TELEMED (bleue verte)
  430. */
  431. if( ( red >= 75 && red <= 130 ) &&
  432. ( green >= 100 && green <= 130 ) &&
  433. ( blue >= 40 && blue <= 100 ) )
  434. {
  435. if( firstPoint == -1 )
  436. firstPoint = ordinate;
  437. numberOfPixels++;
  438. if( colorScale != BLUE_GREEN )
  439. numberOfPixels = 1;
  440. redStart = 75;
  441. greenStart = 100;
  442. blueStart = 40;
  443. redEnd = 130;
  444. greenEnd = 130;
  445. blueEnd = 100;
  446. colorScale = BLUE_GREEN;
  447. temp = 0;
  448. lastPoint = true;
  449. }
  450. /**
  451. * Détection de la couleur de l'échelle d'un TELEMED (orange)
  452. */
  453. if( ( red >= 145 && red <= 175 ) &&
  454. ( green >= 110 && green <= 130 ) &&
  455. ( blue >= 75 && blue <= 105 ) )
  456. {
  457. if( firstPoint == -1 )
  458. firstPoint = ordinate;
  459. numberOfPixels++;
  460. if( colorScale != ORANGE )
  461. numberOfPixels = 1;
  462. redStart = 140;
  463. greenStart = 105;
  464. blueStart = 70;
  465. redEnd = 180;
  466. greenEnd = 135;
  467. blueEnd = 120;
  468. colorScale = ORANGE;
  469. temp = 0;
  470. lastPoint = true;
  471. }
  472. /**
  473. * Détection de la couleur de l'échelle d'un TELEMED (orange sur fond gris clair)
  474. */
  475. if( ( red >= 150 && red <= 195 ) &&
  476. ( green >= 150 && green <= 170 ) &&
  477. ( blue >= 90 && blue <= 160 ) )
  478. {
  479. if( firstPoint == -1 )
  480. firstPoint = ordinate;
  481. numberOfPixels++;
  482. if( colorScale != ORANGE_GREY )
  483. numberOfPixels = 1;
  484. redStart = 150;
  485. greenStart = 150;
  486. blueStart = 90;
  487. redEnd = 195;
  488. greenEnd = 170;
  489. blueEnd = 160;
  490. colorScale = ORANGE_GREY;
  491. temp = 0;
  492. lastPoint = true;
  493. }
  494. /**
  495. * Verification de la présence d'une échelle après 2 pixels différents
  496. */
  497. if( !lastPoint )
  498. {
  499. if( temp >= 1 )
  500. {
  501. if( numberOfPixels > bitmapData.height * .75 && numberOfPixels < 40 )
  502. {
  503. return searchTicks( index, firstPoint, ordinate, bitmapData, redStart, greenStart, blueStart, redEnd, greenEnd, blueEnd, TELEMED, colorScale );
  504. }
  505. firstPoint = -1;
  506. numberOfPixels = 0;
  507. }
  508. temp++;
  509. }
  510. /**
  511. * Verification de la présence d'une échelle en fin d'image (Les TELEMED on un seul pixel de fin)
  512. */
  513. if( ordinate == bitmapData.height - 1 )
  514. {
  515. if( numberOfPixels > bitmapData.height * .75 )
  516. {
  517. return searchTicks( index, firstPoint, ordinate, bitmapData, redStart, greenStart, blueStart, redEnd, greenEnd, blueEnd, TELEMED, colorScale );
  518. }
  519. }
  520. }
  521. }
  522. /**
  523. * Boucle qui parcours les colonnes de la droite vers la gauche sur 100% de l'image
  524. */
  525. for( index = bitmapData.width; index > 0; index-- )
  526. {
  527. var precedentTick : Boolean = false;
  528. /**
  529. * Boucle qui parcours les pixels pour chaque colonne du haut vers le bas de l'image
  530. */
  531. for( ordinate = 0; ordinate < bitmapData.height; ordinate++ )
  532. {
  533. point = new Point();
  534. color = bitmapData.getPixel( index, ordinate );
  535. red = color >> 16 & 0xFF;
  536. green = color >> 8 & 0xFF;
  537. blue = color & 0xFF;
  538. grey = ( red + green + blue ) / 3;
  539. /**
  540. * Détection d'une écographie en nuance de gris, calculs du minimum et du maximum de l'échelle trouvée.
  541. */
  542. if( greyScaleDetected && greyScaleArray.length < 40 )
  543. {
  544. startY = 0;
  545. endY = 0;
  546. if( greyScaleArray.length > 2 && greyScaleArray.length < 30 )
  547. {
  548. startY = greyScaleArray[ 0 ].y;
  549. endY = greyScaleArray[ greyScaleArray.length - 1 ].y;
  550. }
  551. if( ( endY - startY ) > bitmapData.height * 0.4 )
  552. {
  553. distanceCounter = 0;
  554. tickCounter = 0;
  555. totalDistances = new Array();
  556. for each( var greyPoint : Point in greyScaleArray )
  557. {
  558. if( greyScaleArray.length == 3 )
  559. {
  560. distanceFirstSegment = greyScaleArray[ 2 ].y - greyScaleArray[ 1 ].y;
  561. distanceSecondSegment = greyScaleArray[ 1 ].y - greyScaleArray[ 0 ].y;
  562. if( distanceFirstSegment < distanceSecondSegment + TOLERANCE && distanceFirstSegment > distanceSecondSegment - TOLERANCE )
  563. {
  564. start = new Point( greyScaleArray[ 0 ].x, greyScaleArray[ 0 ].y );
  565. end = new Point( greyScaleArray[ 0 ].x, greyScaleArray[ greyScaleArray.length - 1 ].y );
  566. distance = end.y - start.y;
  567. scaleVo = new ScaleCjVo();
  568. scaleVo.distance = distance;
  569. scaleVo.start = start;
  570. scaleVo.end = end;
  571. return scaleVo;
  572. }
  573. } else {
  574. if( temporaryPoint != null )
  575. {
  576. minimum = ( greyPoint.y - temporaryPoint.y ) - TOLERANCE;
  577. maximum = ( greyPoint.y - temporaryPoint.y ) + TOLERANCE;
  578. if( distanceCounter < maximum && distanceCounter > minimum )
  579. {
  580. tickCounter++;
  581. totalDistances.push( distanceCounter );
  582. if( tickCounter == 2 )
  583. {
  584. start = new Point( greyScaleArray[ 0 ].x, greyScaleArray[ 0 ].y );
  585. end = new Point( greyScaleArray[ 0 ].x, greyScaleArray[ greyScaleArray.length - 1 ].y );
  586. distance = end.y - start.y;
  587. if( greyScaleArray[ 0 ].y < 20 )
  588. {
  589. start = new Point( greyScaleArray[ 1 ].x, greyScaleArray[ 1 ].y );
  590. end = new Point( greyScaleArray[ 1 ].x, greyScaleArray[ greyScaleArray.length - 1 ].y );
  591. }
  592. scaleVo = new ScaleCjVo();
  593. scaleVo.distance = distance;
  594. scaleVo.start = start;
  595. scaleVo.end = end;
  596. if( distance > MINIMUM_DISTANCE )
  597. {
  598. return scaleVo;
  599. }
  600. }
  601. } else {
  602. tickCounter = 0;
  603. totalDistances = new Array();
  604. }
  605. distanceCounter = greyPoint.y - temporaryPoint.y;
  606. }
  607. temporaryPoint = greyPoint;
  608. }
  609. }
  610. }
  611. }
  612. }
  613. }
  614. return false;
  615. }
  616. }
  617. }