11 struct track itrack
[50];
13 unsigned char black
=255;
14 unsigned char white
=0;
17 void *image_prc(char *data
, int v
, int h
){
23 t
=image_head(data
, v
, h
);
31 tt
=image_body(data
,v
,h
,t
);
49 int image_head(char *data
, int v
, int h
){
52 int i
=0, neg
[100][2]={0},pos
[100][2]={0};
53 int pf
=0,nf
=0,j
=0,k
=0,t
=0,offset
=0,f
=0,po
=0,flag
=0;
57 for(po
=v
-1; po
>v
-40; po
--){
62 for(i
=1; i
< h
-3; i
++){
63 j
=(unsigned char)*(data
+temp
+i
) ;
64 k
=(unsigned char)*(data
+temp
+i
+2) ;
67 black
=(unsigned char)*(data
+temp
+i
+1) ;
70 if(pf
==0 && i
>50 && po
>70){
80 if(right
-left
<18&& right
-left
>2){ //Add start line searching here
88 if(nf
==0 && i
<20 && po
>70){
101 int image_body(char *data
, int v
, int h
, char start
){
103 int i
=0,j
=0,k
=0,t
=0,offset
=0,f
=0,po
=0,flag
=0,sline
=0;
104 int scale
=0,temp
=0,vo
=0,pos
=0;
107 sline
=itrack
[start
].y
-1;
108 vo
=itrack
[start
].vector
;
116 for(t
=sline
; t
>5; t
--){
127 for(i
=0-scale
; i
<scale
; i
++){
129 if(po
+i
+3<h
&& po
+i
>0) {
132 j
=(unsigned char)*(data
+temp
+po
+i
) ;
133 k
=(unsigned char)*(data
+temp
+po
+i
+2) ;
137 //*(data+temp+po+i)=255;
140 if(k
-j
>offset
&& flag
==1){
141 if((po
+i
-pos
)>1){ // Ignore disturbance spot
146 //*(data+temp+po+i)=255;
175 int image_trail(char *data
, int v
, int h
, int offset
){
177 int vo
=0, po
=0,line
=0;
185 vo
= itrack
[offset
].vector
;
186 po
= itrack
[offset
].x
;
187 line
= itrack
[offset
].y
;
190 for(line
=offset
; line
>5; line
--){
193 for(i
=0; i
<h
-3; i
++){
196 if(m
-n
>step
&& pf
==0) {
202 if(n
-m
>step
&& pf
==1){
205 if(neg
-pos
>1 && neg
-pos
<10){
206 itrack
[offset
++].x
= (neg
+pos
)/2;
207 itrack
[offset
].y
= line
;
208 itrack
[offset
].vector
=itrack
[offset
].x
- itrack
[offset
-1].x
;
217 itrack
[offset
++].x
=-1;
219 itrack
[offset
].vector
=0;
229 int image_body_old(char *data
, int v
, int h
, char start
){
250 itrack
[0].vector
= 0;
254 for(i
=0; i
<50; i
++){
259 //if(black >white) black=white-20;
260 //if(white>220) white=black;
264 base
= itrack
[i
].vector
;
267 // printf("i%d: px=%d py=%d\n",i,px,py);
268 if(py
<20 || px
<2 || px
>h
-1) {
271 // itrack[i+1].vector=itrack[i].vector;
280 for(cal
=0; cal
< li
; cal
++){
282 if(j
==0) temp
= base
+cal
;
283 else temp
= base
-cal
;
284 //printf("-%d",temp);
290 val
= (unsigned char)*(data
+(py
-4)*h
+px
);
294 if(*(data
+(py
-4)*h
+px
-k
)>black
) break;
295 //printf("--%d",*(data+(py-4)*h+px-k));
299 *(data
+(py
-4)*h
+px
-k
)=255;
302 itrack
[i
+1].y
= py
-4;
303 itrack
[i
+1].vector
=0;
309 if(py
-4 <0 || px
+2>h
) break;
310 val
= (unsigned char)*(data
+(py
-4)*h
+px
+1);
311 // printf("in case 1: black is %d, val is %d\n",black,val);
314 if(*(data
+(py
-4)*h
+px
+1-k
)>black
) break;
318 *(data
+(py
-4)*h
+px
+1-k
)=255;//black=val;
319 itrack
[i
+1].x
= px
+1-k
;
320 itrack
[i
+1].y
= py
-4;
321 itrack
[i
+1].vector
=1;
327 if(py
-4 <0 || px
-1<0) break;
328 val
= (unsigned char)*(data
+(py
-4)*h
+px
-1);
331 if(*(data
+(py
-4)*h
+px
-1+k
)>black
) break;
335 *(data
+(py
-4)*h
+px
-1+k
)=255;//black=val;
336 itrack
[i
+1].x
= px
-1+k
;
337 itrack
[i
+1].y
= py
-4;
338 itrack
[i
+1].vector
=-1;
344 if(py
-4 <0 || px
+3>h
) break;
345 val
= (unsigned char)*(data
+(py
-4)*h
+px
+2);
348 if(*(data
+(py
-4)*h
+px
+2-k
)>black
) break;
352 *(data
+(py
-4)*h
+px
+2-k
)=255;//black=val;
353 itrack
[i
+1].x
= px
+2-k
;
354 itrack
[i
+1].y
= py
-4;
355 itrack
[i
+1].vector
=2;
361 if(py
-4 <0 || px
-2<0) break;
362 val
= (unsigned char)*(data
+(py
-4)*h
+px
-2);
365 if(*(data
+(py
-4)*h
+px
-2+k
)>black
) break;
369 *(data
+(py
-4)*h
+px
-2+k
)=255;//black=val;
370 itrack
[i
+1].x
= px
-2+k
;
371 itrack
[i
+1].y
= py
-4;
372 itrack
[i
+1].vector
=-2;
378 if(py
-4 <0 || px
+3>h
) break;
379 val
= (unsigned char)*(data
+(py
-3)*h
+px
+2);
382 if(*(data
+(py
-3)*h
+px
+2-k
)>black
) break;
386 *(data
+(py
-3)*h
+px
+2-k
)=255;//black=val;
387 itrack
[i
+1].x
= px
+2-k
;
388 itrack
[i
+1].y
= py
-3;
389 itrack
[i
+1].vector
=3;
395 if(py
-4 <0 || px
-2<0) break;
396 val
= (unsigned char)*(data
+(py
-3)*h
+px
-2);
399 if(*(data
+(py
-3)*h
+px
-2+k
)>black
) break;
403 *(data
+(py
-3)*h
+px
-2+k
)=255;//black=val;
404 itrack
[i
+1].x
= px
-2+k
;
405 itrack
[i
+1].y
= py
-3;
406 itrack
[i
+1].vector
=-3;
412 if(py
-4 <0 || px
+3>h
) break;
413 val
= (unsigned char)*(data
+(py
-2)*h
+px
+2);
416 if(*(data
+(py
-2)*h
+px
+2-k
)>black
) break;
420 *(data
+(py
-2)*h
+px
+2-k
)=255;//black=val;
421 itrack
[i
+1].x
= px
+2-k
;
422 itrack
[i
+1].y
= py
-2;
423 itrack
[i
+1].vector
=4;
429 if(py
-4 <0 || px
-2<0) break;
430 val
= (unsigned char)*(data
+(py
-2)*h
+px
-2);
433 if(*(data
+(py
-2)*h
+px
-2+k
)>black
) break;
437 *(data
+(py
-2)*h
+px
-2+k
)=255;//black=val;
438 itrack
[i
+1].x
= px
-2+k
;
439 itrack
[i
+1].y
= py
-2;
440 itrack
[i
+1].vector
=-4;
447 if(py
-4 <0 || px
+3>h
) break;
448 val
= (unsigned char)*(data
+(py
-1)*h
+px
+2);
451 if(*(data
+(py
-1)*h
+px
+2-k
)>black
) break;
456 *(data
+(py
-1)*h
+px
+2+k
)=255;//black=val;
457 itrack
[i
+1].x
= px
+2;
458 itrack
[i
+1].y
= py
-1;
459 itrack
[i
+1].vector
=5;
465 if(py
-4 <0 || px
-2<0) break;
466 val
= (unsigned char)*(data
+(py
-1)*h
+px
-2);
469 if(*(data
+(py
-2)*h
+px
-2+k
)>black
) break;
473 *(data
+(py
-1)*h
+px
-2)=255;//black=val;
474 itrack
[i
+1].x
= px
-2;
475 itrack
[i
+1].y
= py
-1;
476 itrack
[i
+1].vector
=-5;
483 val
= (unsigned char)*(data
+(py
)*h
+px
+2);
486 if(*(data
+(py
)*h
+px
+2-k
)>black
) break;
491 *(data
+(py
)*h
+px
+2-k
)=255;//black=val;
492 itrack
[i
+1].x
= px
+2;
494 itrack
[i
+1].vector
=6;
501 val
= (unsigned char)*(data
+(py
)*h
+px
-2);
504 if(*(data
+(py
-2)*h
+px
-2+k
)>black
) break;
508 *(data
+(py
)*h
+px
-2)=255;//black=val;
509 itrack
[i
+1].x
= px
-2;
511 itrack
[i
+1].vector
=-6;
518 if(py
+5> v
||px
+3>h
) break;
519 val
= (unsigned char)*(data
+(py
+1)*h
+px
+2);
521 *(data
+(py
+1)*h
+px
+2)=255;//black=val;
522 itrack
[i
+1].x
= px
+2;
523 itrack
[i
+1].y
= py
+1;
524 itrack
[i
+1].vector
=7;
529 if(py
+5> v
|| px
-2<0) break;
530 val
= (unsigned char)*(data
+(py
+1)*h
+px
-2);
532 *(data
+(py
+1)*h
+px
-2)=255;//black=val;
533 itrack
[i
+1].x
= px
-2;
534 itrack
[i
+1].y
= py
+1;
535 itrack
[i
+1].vector
=-7;
540 if(py
+5> v
|| px
+3>h
) break;
541 val
= (unsigned char)*(data
+(py
+2)*h
+px
+2);
543 *(data
+(py
+2)*h
+px
+2)=255;//black=val;
544 itrack
[i
+1].x
= px
+2;
545 itrack
[i
+1].y
= py
+2;
546 itrack
[i
+1].vector
=8;
551 if(py
+5> v
|| px
-2<0) break;
552 val
= (unsigned char)*(data
+(py
+2)*h
+px
-2);
554 *(data
+(py
+2)*h
+px
-2)=255;//black=val;
555 itrack
[i
+1].x
= px
-2;
556 itrack
[i
+1].y
= py
+2;
557 itrack
[i
+1].vector
=-8;
562 if(py
+5> v
|| px
+3>h
) break;
563 val
= (unsigned char)*(data
+(py
+3)*h
+px
+2);
565 *(data
+(py
+3)*h
+px
+2)=255;//black=val;
566 itrack
[i
+1].x
= px
+2;
567 itrack
[i
+1].y
= py
+3;
568 itrack
[i
+1].vector
=9;
573 if(py
+5> v
||px
-2<0) break;
574 val
= (unsigned char)*(data
+(py
+3)*h
+px
-2);
576 *(data
+(py
+3)*h
+px
-2)=255;//black=val;
577 itrack
[i
+1].x
= px
-2;
578 itrack
[i
+1].y
= py
+3;
579 itrack
[i
+1].vector
=-9;
584 if(py
+5> v
|| px
+3>h
) break;
585 val
= (unsigned char)*(data
+(py
+4)*h
+px
+2);
587 *(data
+(py
+4)*h
+px
+2)=255;//black=val;
588 itrack
[i
+1].x
= px
+2;
589 itrack
[i
+1].y
= py
+4;
590 itrack
[i
+1].vector
=10;
595 if(py
+5> v
|| px
-2<0) break;
596 val
= (unsigned char)*(data
+(py
+4)*h
+px
-2);
598 *(data
+(py
+4)*h
+px
-2)=255;//black=val;
599 itrack
[i
+1].x
= px
-2;
600 itrack
[i
+1].y
= py
+4;
601 itrack
[i
+1].vector
=-10;
606 if(py
+5> v
|| px
+3>h
) break;
607 val
= (unsigned char)*(data
+(py
+4)*h
+px
+1);
609 *(data
+(py
+4)*h
+px
+1)=255;//black=val;
610 itrack
[i
+1].x
= px
+1;
611 itrack
[i
+1].y
= py
+4;
612 itrack
[i
+1].vector
=11;
617 if(py
+5> v
|| px
-2<0) break;
618 val
= (unsigned char)*(data
+(py
+4)*h
+px
-1);
620 *(data
+(py
+4)*h
+px
-1)=255;//black=val;
621 itrack
[i
+1].x
= px
-1;
622 itrack
[i
+1].y
= py
+4;
623 itrack
[i
+1].vector
=-11;
630 val
= (unsigned char)*(data
+(py
+4)*h
+px
);
632 *(data
+(py
+4)*h
+px
)=255;//black=val;
634 itrack
[i
+1].y
= py
+4;
635 itrack
[i
+1].vector
=12;
645 if(py
<35&& flag
==1) {
646 if(itrack
[i
+1].vector
<-1 || itrack
[i
+1].vector
>1)
647 itrack
[i
+1].vector
-=2;
660 itrack
[i
+1].vector
=itrack
[i
].vector
;
666 if(remote
==1) py
=py
-2;
667 if(py
<10 || px
<1 || px
>h
-2) {
670 itrack
[i
+1].vector
=itrack
[i
].vector
;
674 if((unsigned char)*(data
+(py
-1)*h
+px
) < black
) {
675 black
= (unsigned char)*(data
+(py
-1)*h
+px
);
678 itrack
[i
+1].vector
=itrack
[i
].vector
;
681 if((unsigned char)*(data
+(py
-1)*h
+px
+1) < black
) {
682 black
= (unsigned char)*(data
+(py
-1)*h
+px
+1);
685 itrack
[i
+1].vector
=itrack
[i
].vector
;
688 if((unsigned char)*(data
+(py
-1)*h
+px
-1) < black
) {
689 black
= (unsigned char)*(data
+(py
-1)*h
+px
-1);
692 itrack
[i
+1].vector
=itrack
[i
].vector
;
695 if((unsigned char)*(data
+py
*h
+px
+1) < black
) {
696 black
= (unsigned char)*(data
+py
*h
+px
+1);
699 itrack
[i
+1].vector
=itrack
[i
].vector
;
702 if((unsigned char)*(data
+py
*h
+px
-1) < black
) {
703 black
= (unsigned char)*(data
+py
*h
+px
-1);
706 itrack
[i
+1].vector
=itrack
[i
].vector
;
711 itrack
[i
+1].vector
=itrack
[i
].vector
;
723 itrack
[i
+1].vector
=itrack
[i
].vector
;
727 int image_trail_old(char *data
, int v
, int h
, int offset
){
730 int i
=0,j
=0,left
=0,right
=0,last
=0;
734 x
=itrack
[offset
+j
].x
;
735 y
=itrack
[offset
+j
].y
;
736 vt
=itrack
[offset
+j
].vector
;
738 if(y
<5 || x
<1 || x
>=h
-1 || j
+offset
>49) return j
;
743 left
=*(data
+y
*h
+x
-1)+*(data
+(y
-1)*h
+x
-1);
744 right
=*(data
+y
*h
+x
+1)+*(data
+(y
-1)*h
+x
+1);
749 else if(last
>0) left
+=1;
750 else return offset
+j
;
751 }else if(left
<right
){
753 if(*(data
+y
*h
+x
-1) < *(data
+(y
-1)*h
+x
-1)){
754 itrack
[offset
+j
].x
=x
-1;
755 itrack
[offset
+j
].y
=y
;
756 itrack
[offset
+j
].vector
=-6;
759 itrack
[offset
+j
].x
=x
-1;
760 itrack
[offset
+j
].y
=y
-1;
761 itrack
[offset
+j
].vector
=-5;
762 *(data
+(y
-1)*h
+x
-1)=255;
764 }else if(left
>right
){
766 if(*(data
+y
*h
+x
+1) < *(data
+(y
-1)*h
+x
+1)){
767 itrack
[offset
+j
].x
=x
+1;
768 itrack
[offset
+j
].y
=y
;
769 itrack
[offset
+j
].vector
=6;
772 itrack
[offset
+j
].x
=x
+1;
773 itrack
[offset
+j
].y
=y
-1;
774 itrack
[offset
+j
].vector
=5;
775 *(data
+(y
-1)*h
+x
+1)=255;