回 帖 发 新 帖 刷新版面

主题:[原创]试着写了一个显示BMP图像的小程序

刚刚研究显示图像,写的很粗糙,大家不要见笑。只针对16色的BMP写的,恳请大家能指出存在的问题,谢谢。
DECLARE SUB drawpix ()
SCREEN 12
CLS
DIM w AS LONG, h AS LONG, offset AS LONG, dataclor AS LONG
DIM SHARED t AS LONG, clor
INPUT filestr$
OPEN filestr$ FOR BINARY AS #1
SEEK #1, 1
IF INPUT$(2, #1) = "BM" THEN
LOCATE 1, 60
PRINT "It is a bmp image!"
ELSE
END
END IF
GET #1, 19, w
GET #1, 23, h
GET #1, 11, offset
LOCATE 20, 20
PRINT w, h, HEX$(offset)
DO UNTIL EOF(1)
IF x > w THEN
x = 1
h = h - 1
END IF
GET #1, offset + i, dataclor
t = dataclor
t = (t AND &HF)
CALL drawpix
PSET (x, h), clor
x = x + 1
t = dataclor
t = (t AND &HF0) / &H10
CALL drawpix
PSET (x, h), clor
x = x + 1
i = i + 1
LOOP
CLOSE 1
END

SUB drawpix
IF t = 0 THEN
clor = 0
ELSEIF t = 1 THEN
clor = 4
ELSEIF t = 2 THEN
clor = 10
ELSEIF t = 3 THEN
clor = 10
ELSEIF t = 4 THEN
clor = 8
ELSEIF t = 5 THEN
clor = 5
ELSEIF t = 6 THEN
clor = 3
ELSEIF t = 7 THEN
clor = 7
ELSEIF t = 8 THEN
clor = 8
ELSEIF t = 9 THEN
clor = 12
ELSEIF t = 10 THEN
clor = 10
ELSEIF t = 11 THEN
clor = 14
ELSEIF t = 12 THEN
clor = 1
ELSEIF t = 13 THEN
clor = 13
ELSEIF t = 14 THEN
clor = 9
ELSEIF t = 15 THEN
clor = 15
END IF
END SUB
先得输入16色BMP图象的位置

回复列表 (共7个回复)

沙发

谢谢

板凳

用VESA吗
可以用800*600*256/1024*768*256足够
800*600*65536/1024*768*65536也可
要看到底是那种,最好不要16777216/4294967296色位图,太大

3 楼

谢谢DEF了,这只是个试验用的小程序,这几天才研究明白BMP的文件结构,写了一个验证一下,还请多多指教。

4 楼

我用vb写了个程序来验证bmp结构
8*8点阵的是对的
换成16*16的出问题了

5 楼

请原谅我才疏学浅,什么叫8*8点阵和16*16点阵,能帮我挑下毛病吗?

6 楼

BMP文件里有个颜色深度的字段,现在24位和32位的多些,再低一些的话有压缩的。

7 楼

谢谢,不过我从网上找的资料里没有写,我也就不知道,这个程序真是太粗糙了,不好意思,影响大家吃饭了,呵呵。如何调整颜色谁能给我讲讲就好了

我来回复

您尚未登录,请登录后再回复。点此登录或注册