home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Computerworld 1996 March
/
Computerworld_1996-03_cd.bin
/
idg_cd3
/
grafika
/
aplikace
/
framer10
/
rle&mmp.bas
< prev
next >
Wrap
BASIC Source File
|
1996-02-14
|
3KB
|
119 lines
zefile$ = DIR$("*.tga")
how% = 0
DO UNTIL zefile$ = ""
zefile$ = LEFT$(zefile$, INSTR(zefile$, ".") - 1)
how% = how% + 1
CLS
PRINT "Run Length Encoding of 24 bit Targa: "; zefile$
PRINT "File #"; how%
OPEN zefile$ + ".tga" FOR BINARY AS #1
x$ = " "
y$ = " "
z$ = " "
aver@ = 0
aveg@ = 0
aveb@ = 0
ave@ = 0
GET #1, 13, x$
GET #1, 15, y$
GET #1, 18, z$
x% = CVI(x$)
y% = CVI(y$)
PRINT "Total X ="; x%
PRINT " Y ="; y%
PRINT "Direction = ";
IF ASC(z$) = 32 THEN
PRINT "Forward"
ELSE
PRINT "Reverse"
END IF
PRINT STRING$(80, "-")
IF x% MOD 4 = 0 THEN
OPEN zefile$ + ".rle" FOR OUTPUT AS #2
CLOSE 2
OPEN zefile$ + ".rle" FOR BINARY AS #2
l@ = LOF(1) - (x% * 3) + 1
B$ = SPACE$(x% * 3)
Rle@ = 1
IF ASC(z$) = 32 THEN
start@ = 19
ender@ = l@
steper@ = x% * 3
ELSE
start@ = l@
ender@ = 19
steper@ = -x% * 3
END IF
FOR q@ = start@ TO ender@ STEP steper@
GET #1, q@, B$
Black% = 0
Part% = 0
Org% = 0
FOR P% = 1 TO x% * 3 STEP 12
state% = 0
mask% = 15
FOR r% = 0 TO 11 STEP 3
IF ASC(MID$(B$, P% + r%, 1)) < 15 AND ASC(MID$(B$, P% + r% + 1, 1)) < 15 AND ASC(MID$(B$, P% + r% + 2, 1)) < 15 THEN
state% = state% + 1
mask% = mask% - 2 ^ (3 - (r% / 3))
ELSE
aveb@ = aveb@ + ASC(MID$(B$, P% + r%, 1))
aveg@ = aveg@ + ASC(MID$(B$, P% + r% + 1, 1))
aver@ = aver@ + ASC(MID$(B$, P% + r% + 2, 1))
ave@ = ave@ + 1
END IF
NEXT r%
IF state% = 4 THEN
IF Part% <> 0 OR Org% <> 0 THEN GOSUB saveit
Black% = Black% + 1
ELSEIF state% <> 0 THEN
IF Black% <> 0 OR Org% <> 0 THEN GOSUB saveit
Rle$ = "P" + CHR$(mask%)
PUT #2, Rle@, Rle$
Rle@ = Rle@ + 2
ELSE
IF Part% <> 0 OR Black% <> 0 THEN GOSUB saveit
Org% = Org% + 1
END IF
NEXT P%
IF Black% <> 0 OR Part% <> 0 OR Org% <> 0 THEN GOSUB saveit
NEXT q@
CLOSE
PRINT
SHELL "trg2mmp " + zefile$ + ".tga " + zefile$ + ".mmp"
OPEN zefile$ + ".rgb" FOR OUTPUT AS #3
PRINT #3, aver@ \ ave@
PRINT #3, aveg@ \ ave@
PRINT #3, aveb@ \ ave@
PRINT #3, 100
PRINT #3, 100
END IF
CLOSE
zefile$ = DIR$
LOOP
END
saveit:
IF Black% <> 0 THEN
Rle$ = "B" + CHR$(Black%)
PUT #2, Rle@, Rle$
Rle@ = Rle@ + 2
END IF
IF Part% <> 0 THEN
Rle$ = "P" + CHR$(Part%)
PUT #2, Rle@, Rle$
Rle@ = Rle@ + 2
END IF
IF Org% <> 0 THEN
Rle$ = "O" + CHR$(Org%)
PUT #2, Rle@, Rle$
Rle@ = Rle@ + 2
END IF
T@ = T@ + Black% + Part% + Org%
Black% = 0
Part% = 0
Org% = 0
RETURN