level 5

按照上图算法DECLARE SUB line0 (x0 AS LONG, x1 AS LONG, y AS LONG)
' 24位 灰度 BMP 图象 非最大抑制 保存到"test.bmp"
'
DIM w AS LONG, h AS LONG '图片的宽 高(像数数)
DIM t1 AS INTEGER, t2 AS LONG
DIM dataweizhi AS LONG '图象数据开始的位置
'PRINT "start :"
CLS
filename$ = "1000.bmp" '输入图象文件
OPEN filename$ FOR BINARY AS #1
SEEK #1, 1
IF INPUT$(2, # 1) <> "BM" THEN GOTO exitt '非bmp文件 开玩笑 走了
GET #1, 19, w
GET #1, 23, h
GET #1, 11, dataweizhi
dataweizhi = dataweizhi + 1
GET #1, 29, t1
IF t1 <> 24 THEN GOTO exitt '非24位色文件 没办法 走吧
GET #1, 31, t2
IF t2 <> 0 THEN GOTO exitt '压缩文件 没办法 走吧
PRINT "w=", w
PRINT "h=", h
SCREEN _NEWIMAGE(640, 480, 32) '定义32位真彩色屏幕
CLS , _RGB(170, 170, 170) '清屏
COLOR , _RGB(0, 0, 170)
PRINT filename$ '图名
PRINT "w=", w '图宽
PRINT "h=", h '图高
DIM col(w, h) AS STRING * 1 '记录图像每一点的值
i4 = w * 3
i4 = i4 - (i4 \ 4) * 4
IF i4 <> 0 THEN i4 = 4 - i4 '4字节补齐量
'PRINT "start 1..."
DIM lines AS LONG '行号
lines = 0
'从图片文件读出
FOR y = 0 TO h - 1
FOR x = 0 TO w - 1
SEEK #1, dataweizhi + x * 3
col(x, y) = INPUT$(1, # 1) '读出一点
PSET (x, 480 - y), _RGB(ASC(col(x, y)), ASC(col(x, y)), ASC(col(x, y))) '写到屏幕
NEXT x
dataweizhi = dataweizhi + w * 3 + i4 '补齐4字节
NEXT y
'PRINT "...end 1"
'暂停,按任意键继续
LOCATE 1, 1
PRINT "Pause, press any key to continue"
WHILE INKEY$ = "": WEND
'PRINT "start 2..."
'写中部代码
'xx = 0
'yy = 0
a0 = 0 '线头
DIM q AS INTEGER '抑制起点
FOR y = 0 TO h - 1 '水平方向
x = 1 'TO w - 1
q = 0
WHILE x < w - 1
IF ASC(col(x, y)) > ASC(col(x + 1, y)) THEN
IF ASC(col(x, y)) > ASC(col(x - 1, y)) THEN
FOR i = q TO x - 1 '则保留1点:前面保留3点。q+1 to x-2
PSET (i, 480 - y), _RGB(0, 0, 0)
col(i, y) = CHR$(0)
NEXT
q = x + 1
END IF
ELSE
x = x + 1
WHILE (x < w - 1) AND (ASC(col(x, y)) < ASC(col(x + 1, y)))
x = x + 1
WEND
IF x < w - 1 THEN
FOR i = q TO x - 1 '则保留1点:前面保留3点。q+1 to x-2
PSET (i, 480 - y), _RGB(0, 0, 0)
col(i, y) = CHR$(0)
NEXT
q = x + 1
END IF
END IF
x = x + 2
WEND
NEXT y
'保存图形 1. 复制文件头 2.写入数据
'Delete file then open for binary
OPEN "test.bmp" FOR OUTPUT AS #2
CLOSE #2
OPEN "test.bmp" FOR BINARY AS #2
'54字节文件头
DIM t3 AS SINGLE '4字节
SEEK #1, 1
FOR i = 1 TO 54 \ 4
GET #1, , t3
PUT #2, , t3
NEXT
GET #1, 11, dataweizhi
dataweizhi = dataweizhi + 1
FOR y = 0 TO h - 1
FOR x = 0 TO w - 1
SEEK #2, dataweizhi + x * 3
PUT
#2, , col(x, y): PUT #
2, , col(x, y): PUT #2, , col(x, y) 'r,g,b
NEXT x
dataweizhi = dataweizhi + w * 3 + i4 '补齐4字节
lines = lines + 1
IF lines \ 50 = lines / 50 THEN
LOCATE 2, 5
PRINT FIX(lines / h * 100); "%" '保存进程 数字百分比
END IF
NEXT y
LOCATE 2, 5
PRINT FIX(lines / h * 100); "%" '保存进程 数字百分比
'PRINT "...end"
CLOSE
'暂停,按任意键继续
'WHILE INKEY$ = "": WEND
exitt: END

