- 注册时间
- 2004-10-1
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2005-7-7 14:47:00
|
显示全部楼层
第4法以更新................
注:仅测试过NC2600c
地址说明:
6592~8191图形缓冲区)
24575~24575-NGVB数据存储区.N为数据长度.注:该区数据由尾至头存储)
1.直接POKE图片缓存:
如:
10 FOR Q=6592 TO 8191
20 POKE Q,A:REM A为图片数据
30 NEXT
该法速度较慢,但简单.
该法单图DATA文件大小为:3200(min)-6400(max)
2.直接读取极速显图法)
如:
10 OPEN "XXX" FOR RANDOM AS#1 LEN=100
20 POKE 26254,192OKE 26258,25:REM 读到图片显存
30 POKE 26262,64OKE 26267,6:REM 每次读的大小
40 P=LOF(1)/1600-1:REM 图片张数
50 FOR Q=0 TO P
60 SE=Q*1600:REM 读文件的位置.当SE以20为步长递增或递减时可以实现滚图(SE=定值*1600+N:N=N+20)
70 H=INT(SE/256)=SE-H*256
80 POKE 47446,LOKE 47447,H:CALL 26207
90 NEXT:GOTO 20
注:贼快的方法.简单强大.显示b16图片效果也不错.该法单图DATA文件大小:1600
3.批量法(有点难度.理解了就没问题了)
说明:当GVB中出现A$="XXX"等语句时GVB会把A$写入缓存.并记录A$的地址.此法要做的就是改变GVB记下的A$地址.
例:
10 CLEAR:CLS
20 A$="":B$=""
30 A=47302S=PEEK(A)+PEEK(A+1)*256:REM DS---第20条语句中A$&B$等的开始地址
40 POKE DS+2,200:REM A$的字符串长度
50 POKE DS+3,LD:POKE DS+4,HD:REM HD*256+LD=字符串开始地址
60 POKE DS+7,200: REM B$字符串的长度
70 POKE DS+8,192:POKE DS+9,2:REM 2*256+192=704(字符缓存开始地址)
80 LEST B$=A$:POKE 914,1:PRINT:POKE 914,0:END
注:POKE 914,1(显示小字体)POKE 914,0(显示大字体.GRAPH模式下不可用)DATA文件大小1600
4.矩行作图法:(研究中...)
10 GRAPH:CLEAR
20 CLSIM A$(16)
30 OPEN "XXX" FOR RANDOM AS#1 LEN=100:FIELD #1,100 AS P$:REM 假设打开的图片文件为1600个字节
40 FOR Q=16 TO 1 STEP -1:REM 因为GVB的缓存由24575向前存储.要想让图片是正的就要倒着让数据存进去
50 GET #1,Q:A$(Q)=P$
60 NEXT Q:CLOSE #1
70 POKE 34731,9:REM 改BOX函数
80 D=PEEK(254)+PEEK(255)*256-100:REM 254是地址低位.255是地址高位.(该地址为图片开使地址.相当于24575-文件长度).为什么减100那就要研究一下FOR函数了
90 H=INT(D/256)=D-H*256
100 POKE 146,L:POKE 147,H:REM 可以算一下H*256+L;是不是等于24575-文件长度呢?
110 BOX 1,0,159,79,1
120 POKE 34731,10:END
注:用来显示32字节(16*16)大小的图片无论是速度还是调用都再好不过.只是感觉这个找起地址来还有点麻烦.因为GVB的缓存中一有东西存入时地址大多会变.而且还要是倒着存放.晕... 第100条的146&147可改为152&153,但H&L就不是这样找了.别看我.我也还不知到呢.
●其实每个程序都有很大的拓展空间.我就不举例了.
|
|