任意大小的 256 色 BMP 图象显示
qbasic吧
全部回复
仅看楼主
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
2016年10月28日 08点10分 1
level 11
有空试试,能运行在哪个版本?
2016年11月12日 13点11分 3
1.1 或 4.5
2016年11月13日 12点11分
估计这个需要在纯dos环境中运行。。。
2016年11月14日 01点11分
是啊 颜色不准 不知是什么原因?
2016年11月21日 11点11分
@起帆远航 颜色不对,p(1)和这(3)调换一下就好了,这得感谢lwjohn指出错误
2017年03月31日 10点03分
level 1
为什么运行结果是黑屏:我把图片名改成了正在使用的320*200的bmp图片0218。
正在学习
OUT &H3C8, Temp%
OUT &H3C9, PEEK(VARPTR(PalVar(Temp%)))
OUT &H3C9, PEEK(VARPTR(PalVar(Temp%))+1)
OUT &H3C9, PEEK(VARPTR(PalVar(Temp%))+2)
我还头疼。
2017年03月28日 01点03分 4
print PEEK(VARPTR(PalVar(Temp%)))是多少
2017年03月28日 12点03分
@白芦花 先解决运行黑窗体的问题,我为什么运行失败?只改变了文件名
2017年03月29日 02点03分
@lwjohn 能否把对应的真彩色图片贴出来对比?
2017年03月29日 02点03分
@lwjohn 0218是真彩色的 IF t1 <> 8 THEN GOTO exitt
2017年03月29日 03点03分
level 1
下载你的图片可以运行,显重显示了。奇怪?
2017年03月29日 02点03分 5
用你的图片可以重新显示,其他的BMP不行。你的图片是方的而已。
2017年03月29日 03点03分
可能未细看,是不是要求256色?256色有什么意义?哈哈。我要离线了。回来再说,再看是不是要求256
2017年03月29日 03点03分
这个图片,程序没有改变RGB(?)顺序,123未改成321
2017年03月29日 08点03分
level 1
256色图差了很多。
先把颜色顺序改一下
OUT &H3C8, i
OUT &H3C9, p(3)
OUT &H3C9, p(2)
OUT &H3C9, p(1)
颜色就好一些了。
2017年03月29日 05点03分 6
level 1
楼上的插图是存盘建议存为PNG;
再看看任性存为BMP256的图片:
2017年03月29日 05点03分 7
level 1
任意大小的真彩色,也有这个问题:某些尺寸比例的图片会扭曲。
刚刚上传的扭曲的图片被删除。图片尺寸550*537*256,改成320*298*256就可以正常过程序。楼上的两个图片就是缩小后的。
2017年03月29日 09点03分 9
可能有计算错误吧
2017年03月30日 07点03分
纠正:550*537*256按比例改成360*298*256就可以正常显示。程序未做任何修改或者简化。
2017年03月31日 00点03分
所谓扭曲就是类似长方形的对角点反向拉伸的那种情形:例如0~199/0~319写成0~200/0~320的情形
2017年03月31日 01点03分
变形图片不让上传,再形象的描述一下:图形像素变成平行四边形分布了。犹如以很小视角看三维表面。
2017年03月31日 05点03分
level 5
白芦花 楼主
图片调到550*537 256色,没看到你说的扭曲,色彩好象不对
2017年03月31日 10点03分 10
level 5
白芦花 楼主
p3 和p1调换一下就太好了
2017年03月31日 10点03分 11
level 1
我的问题现在转入PALETTE i& \ 160, COLOR
调色板的这个COLOR参数如何设置。这个COLOR的实际值像是RGB的计算值,包括COLOR在内的记录一共48000条,每连续160个COLOR数据完全重复,相当于有300条不重复的COLOR记录。
这个COLOR是如何获取的?在SCREEN 2模式下,COLOR在调色板取0或者1,所获得的前景色是不一样的。因为只有0 OR 1,所以很容易掌控。对于SCREEN 13有256色,如何通过读取图片自动获取调色板的这个颜色参数?如果不是自动获取,而是设置,那是不是就很难了?
2017年04月01日 07点04分 12
以前,我做过一个16位的图在256中显示,就是最前面的256种颜色
2017年04月01日 10点04分
我看过别人的QB256显示16,24位图,先设置好调色板,全部用这个调色板,然后取最相近的颜色,来显示
2017年04月01日 10点04分
level 1
在这里说调色板,对于256色,是很实用的。
2017年04月01日 07点04分 13
256真的是效果不太好,qb64都是32位的,跟32位CPU相对应,显示速度最快
2017年04月01日 10点04分
level 1
2017年04月01日 08点04分 14
请下载第一个图片试试加载后变不变形?
2017年04月01日 08点04分
WIN7/QB64--v1.1
2017年04月01日 08点04分
@lwjohn 我是WIN8.1/QB64--V1.1
2017年04月01日 10点04分
@lwjohn 行不对齐,我做这个程序时碰到过
2017年04月01日 10点04分
level 5
白芦花 楼主
很正常,估计是你哪里改了没还原吧
2017年04月01日 10点04分 15
这个很容易重复。只要拷贝上述代码,改写文件名,改123为321(不改也可),就可以运行了。还是有的扭变。你也拷贝上述代码试试。如果正常,那只能查我的电脑问题了。
2017年04月01日 11点04分
我刚刚在win10笔记本上也试了,同样偶有变形。这是怎么回事呢。这个256程序我没有心思按自己的口味做改动。
2017年04月01日 13点04分
level 1
除了上面的树图片变形,还有下边两个:
一般的说越大的照片越非标尺寸的,变形的几率会越大些。
2017年04月01日 13点04分 16
小图片是经过程序的屏幕拷贝,尺寸似乎变小了,第二次走程序就变形了。
2017年04月01日 13点04分
@lwjohn 变形不是重点,这里就略过吧
2017年04月01日 13点04分
@白芦花 好吧。若是我的电脑问题,不太号解决。毕竟你的图形是正常的。存疑。
2017年04月01日 16点04分
@lwjohn 你给我的是24位的,我还要转化一下。可能用不同的转化程序吧
2017年04月01日 21点04分
level 1
转向PALETTE吧?要搞256,方显palette有意义。
2017年04月01日 23点04分 17
网上大量传说PALETTE USING,未看明白。
2017年04月01日 23点04分
做一个任意大小的通用调色板吧?
2017年04月02日 05点04分
@lwjohn 有了真彩色,就不会回到256,就好象有了车,一般就不走路了,只能偶尔玩玩
2017年04月02日 22点04分
1 2 尾页