level 5
白芦花
楼主

'任意大小的 256 色 BMP 图象显示' IROII 2005/9/28
'先用画图把一些jpg图片转化256色bmp 放到Qbasic目录下 filename$ = "????.bmp" 这里指定图片名
DIM w AS LONG, h AS LONG, t1 AS INTEGER, t2 AS LONG
DIM dataweizhi AS LONG '图象DATA开始的位置
main:
start: 'SCREEN 0
CLS
' INPUT "输入256色BMP文件全名,注意文件名必须正确格式,否则将导致无法预料的结果:", filename$
filename$ = "2f48.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 <> 8 THEN GOTO exitt '非256色文件 没办法 走吧
GET #1, 31, t2
IF t2 <> 0 THEN GOTO exitt '压缩文件 没办法 走吧
readandsetpalette: '颜色表
SCREEN 13
OUT &H3C6, 255
DIM p(1 TO 4) AS INTEGER
FOR i = 0 TO 255
SEEK #1, 55 + 4 * i
p(1) = INT(ASC(INPUT$(1, #1)) / 4)
SEEK #1, 56 + 4 * i
p(2) = INT(ASC(INPUT$(1, #1)) / 4)
SEEK #1, 57 + 4 * i
p(3) = INT(ASC(INPUT$(1, #1)) / 4)
'下面的是掩码
SEEK #1, 58 + 4 * i
p(4) = ASC(INPUT$(1, #1))
OUT &H3C8, i
OUT &H3C9, p(1)
OUT &H3C9, p(2)
OUT &H3C9, p(3)
NEXT
ERASE p
DATA:
DIM col AS INTEGER
i4 = w - (w \ 4) * 4
IF i4 <> 0 THEN i4 = 4 - i4'4字节补齐量
'大于屏幕图片按比例显示
IF h > 200 THEN '屏幕高度
temp1 = h / 200
temp2 = FIX(temp1)
IF temp1 = temp2 THEN h2bu = temp2 ELSE h2bu = temp2 + 1'高度比值
ELSE
h2bu = 1
END IF
IF w > 320 THEN '屏幕宽度
temp1 = w / 200
temp2 = FIX(temp1)
IF temp1 = temp2 THEN w2bu = temp2 ELSE w2bu = temp2 + 1'水平比值
ELSE
w2bu = 1
END IF
IF h2bu > w2bu THEN s2bu = h2bu ELSE s2bu = w2bu '步长 即比值
xx = 0
yy = 0
FOR y = 0 TO h - 1 STEP s2bu
FOR x = 0 TO w - 1 STEP s2bu '跳过几点
SEEK #1, dataweizhi + x
col = ASC(INPUT$(1, #1)) '取得一个颜色
PSET (xx, 200 - yy), col '写到屏幕
xx = xx + 1 '水平向右
NEXT x
xx = 0
yy = yy + 1 '200-yy 垂直向上
dataweizhi = dataweizhi + w * s2bu + i4'补齐4字节 跳过几行
NEXT y
exitt: END










