Skip to content

Commit 313d4d3

Browse files
committed
SAMPLES: added img2ascii sample
1 parent 08ebf82 commit 313d4d3

File tree

1 file changed

+55
-10
lines changed

1 file changed

+55
-10
lines changed

samples/distro-examples/graphics/img2ascii.bas

Lines changed: 55 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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 0xff0000) rshift 16
14-
g = (c band 0xff00) rshift 8
13+
r = ((c band 0xff0000) rshift 16)
14+
g = ((c band 0xff00) rshift 8)
1515
b = (c band 0xff)
1616
n += (r + g + b) / 3
1717
next x
1818
next y
1919
return n
2020
end
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 0xff0000) rshift 16)
33+
gx = ((c band 0xff00) rshift 8)
34+
bx= (c band 0xff)
35+
36+
r += ((c band 0xff0000) rshift 16)
37+
g += ((c band 0xff00) rshift 8)
38+
b += (c band 0xff)
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+
2262
func 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
110155
end
111156

112157
imageToAscii("tree.png")

0 commit comments

Comments
 (0)