MODE 8
LET araysize%=120 :REM You need to keep the data size for only what is needed to get the sketch
DIM hori%(araysize%) :REM if the entire image is not captured you will need to increase hori% and vert% value
DIM vert%(araysize%)
ti%=0
PROCloadbmp("mypic.bmp",0,0,300,300)
PROCsketchscan("face",araysize%)
PROCcolor("f","blue")
PROCsketchdra("face")
REPEAT
PROCarraydra(RND(500),RND(500),RND(15))
ti%+=1
UNTIL ti%=100
WAIT 0
END
REM PROCEDURES ******************************
DEF PROCgraphics(x,y)
VDU 23,22,x;y;8,15,16,1
OFF: VDU 5
ENDPROC
DEFPROCsavebmp(name$,x%,y%,h%,v%)
OSCLI "SCREENSAVE """+name$+""" "+STR$(x%)+","+STR$(y%)+","+STR$(h%)+","+STR$(v%)
ENDPROC
DEFPROCloadbmp(name$,x%,y%,h%,v%)
OSCLI "DISPLAY """+name$+""" "+STR$(x%)+","+STR$(y%)+","+STR$(h%)+","+STR$(v%)
ENDPROC
REM draw the array
DEFPROCarraydra(x%,y%,gc%)
LOCAL n%
GCOL gc%
REPEAT
LINE x%+hori%(n%),y%+vert%(n%),x%+hori%(n%),y%+vert%(n%)
n%+=1
UNTIL n%=araysize%
ENDPROC
DEFPROCsketchdra(name$)
LOCAL cx%,cy%,oun%,sof%
A=OPENIN(@dir$+name$+".txt")
oun%=0
REPEAT
INPUT#A,hori%(oun%),vert%(oun%)
IF hori%(oun%)=1 THEN sof%=1
oun%+=1
UNTIL sof%=1 OR oun%>araysize%
MOVE 0,0
CLOSE#A
ENDPROC
REM widthheight is the size of the bmp.. it must be perfectly square (this tool makes a file with the sketch pixel locations
DEFPROCsketchscan(name$,wh%)
LOCAL cycle%,trip%,sr%,sg%,sb%,ar%,fin%
A=OPENOUT(@dir$+name$+".txt")
REPEAT
REPEAT
PROCrgbret(cycle%,trip%,sr%,sg%,sb%)
IF sr%+sg%+sb%=0 THEN PRINT#A,cycle%,trip%
cycle%+=2
UNTIL cycle%>wh%
cycle%=0
trip%+=2
UNTIL trip%=araysize%
PRINT#A,1,1
CLOSE#A
ENDPROC
REM *****SPECIAL RGB tools (color extraction) has use with PROCdotrgb
DEF PROCrgbret(x%,y%,RETURN r%,RETURN g%,RETURN b%)
LOCAL rgb%
rgb%=TINT(x%,y%)
r%=rgb% AND &FF
g%=rgb%>>8 AND &FF
b%=rgb%>>16 AND &FF
ENDPROC
DEF PROCcolor(fb$,rgb$)
PRIVATE assemble$,br%,bg%,bb%
IF rgb$="0" OR rgb$="black" THEN rgb$="000,000,000"
IF rgb$="1" OR rgb$="red" THEN rgb$="200,000,000"
IF rgb$="2" OR rgb$="green" THEN rgb$="000,200,000"
IF rgb$="3" OR rgb$="yellow" THEN rgb$="200,200,000"
IF rgb$="4" OR rgb$="blue" THEN rgb$="000,000,200"
IF rgb$="5" OR rgb$="magenta" THEN rgb$="200,000,200"
IF rgb$="6" OR rgb$="cyan" THEN rgb$="000,200,200"
IF rgb$="7" OR rgb$="white" THEN rgb$="200,200,200"
IF rgb$="8" OR rgb$="grey" THEN rgb$="056,056,056"
IF rgb$="9" OR rgb$="light red" THEN rgb$="248,056,056"
IF rgb$="10" OR rgb$="light green" THEN rgb$="056,248,056"
IF rgb$="11" OR rgb$="light yellow" THEN rgb$="248,248,056"
IF rgb$="12" OR rgb$="light blue" THEN rgb$="056,056,248"
IF rgb$="13" OR rgb$="light magenta" THEN rgb$="248,056,248"
IF rgb$="14" OR rgb$="light cyan" THEN rgb$="056,248,248"
IF rgb$="15" OR rgb$="light white" THEN rgb$="248,248,248"
assemble$=rgb$
br%=VAL(MID$(assemble$,1,3)):bg%=VAL(MID$(assemble$,5,3)):bb%=VAL(MID$(assemble$,9,3))
IF fb$="f" OR fb$="F" THEN COLOUR 0,br%,bg%,bb% : GCOL 0
IF fb$="b" OR fb$="B" THEN COLOUR 1,br%,bg%,bb% : GCOL 128+1
ENDPROC