@@ -10,15 +10,55 @@ func calc_block(byref dat, h, y2, w, x2)
1010 for y = 0 to h
1111 for x = 0 to w
1212 c = -dat [y2 + y, x2 + x ]
13- r = (c band 0 xff0000) rshift 16
14- g = (c band 0 xff00) rshift 8
13+ r = (( c band 0 xff0000) rshift 16 )
14+ g = (( c band 0 xff00) rshift 8 )
1515 b = (c band 0 xff)
1616 n += (r + g + b) / 3
1717 next x
1818 next y
1919 return n
2020end
2121
22+ func calc_color( byref dat, h, y2, w, x2)
23+ local y,x,c
24+ local r = 0
25+ local g = 0
26+ local b = 0
27+ local wh = w * h
28+
29+ for y = 0 to h
30+ for x = 0 to w
31+ c = -dat [y2 + y, x2 + x ]
32+ rx = ((c band 0 xff0000) rshift 16 )
33+ gx = ((c band 0 xff00) rshift 8 )
34+ bx= (c band 0 xff)
35+
36+ r += ((c band 0 xff0000) rshift 16 )
37+ g += ((c band 0 xff00) rshift 8 )
38+ b += (c band 0 xff)
39+ next x
40+ next y
41+
42+ r = r / wh
43+ g = g / wh
44+ b = b / wh
45+
46+ local minv = min(r,g,b)
47+ local maxv = max(r,g,b)
48+
49+ if (minv < maxv) then
50+ local diff = iff(maxv - minv == 0 , 1 , maxv - minv)
51+ r = int( 255 * (r - minv) / diff)
52+ g = int( 255 * (g - minv) / diff)
53+ b = int( 255 * (b - minv) / diff)
54+ return rgb(r,g,b)
55+ else
56+ r = min( 255 , r)
57+ return rgb(r,r,r)
58+ endif
59+
60+ end
61+
2262func get_char( byref tbl, n)
2363 local r = tbl[n]
2464 if r > 0 then return r
@@ -38,11 +78,11 @@ func create_table
3878 local w = txtw(chars)
3979 local h = txth(chars)
4080 local cw = txtw( "1" )
41-
81+
4282 cls: print chars
43- img = image( 0 , 0 , w, h)
83+ img = image( 0 , 0 , w, h, 1 )
4484 img.save(dat)
45- cls
85+ cls: showpage
4686
4787 local vals = []
4888 local minv = maxint
@@ -61,7 +101,8 @@ func create_table
61101 local tbl = {}
62102 for i = 1 to len(chars)
63103 ch = mid(chars, i, 1 )
64- n = 255 * (vals [i - 1 ] - minv) / (maxv - minv)
104+ diff = iff(maxv - minv == 0 , 1 , maxv - minv)
105+ n = 255 * (vals [i - 1 ] - minv) / diff
65106 vals [i - 1 ] = n
66107 tbl[n] = ch
67108 next i
@@ -100,13 +141,17 @@ sub imageToAscii(path)
100141 next bly
101142
102143 for bly = 0 to blh - 1
103- row = ""
104144 for blx = 0 to blw - 1
105- n = 255 * (pic [bly,blx ] - minv) / (maxv - minv)
106- row += get_char(tbl, n)
145+ diff = iff(maxv - minv == 0 , 1 , maxv - minv)
146+ n = 255 * (pic [bly, blx ] - minv) / diff
147+ y2 = iff(bly== 0 , 1 ,bly) * block_height
148+ x2 = iff(blx== 0 , 1 ,blx) * block_width
149+ color calc_color(dat, block_height, y2, block_width - 1 , x2)
150+ print get_char(tbl, n) ;
107151 next blx
108- print row
152+ print
109153 next bly
154+ showpage
110155end
111156
112157imageToAscii( "tree.png" )
0 commit comments