在Quick Basic中调用PCX图象文件 上海 汪 箴 1996-09-27 PCX格式的图形有个128字节的文件头,依次包含了以下信息(括号内的数字表示其所占的字节):制造商编码(1)、版本号(1)、编码号(1)、像素占Bit数(1)、左上角坐标(4)、右下角坐标(4)、水平分辨率(2)、垂直分辨率(2)、调色板(48)、保留(1)、每条扫描线占字节数(2)、调色板格式(1)、保留(60)。从第129字节起是压缩过的图形。解压缩是用QB调用PCX文件的关键。PCX的解压缩方法是这样的:若读到的字节最前两个Bit都是1(即大于C0 h),则此字节的后六个Bit表示下一字节的重复遍数。例如压缩字串12 C3 00 34 C4 FF解压后就成为12 00 00 00 34 FF FF FF FF。 了解了其存储格式,编程也就不是件难事了。以下是一个QB实例。 DIM X1,X2,Y1,Y2,AS INTEGER ;定义两角坐标 DIM BPD,TMP AS STRING*1 ;BPD即像素占Bit数变量 DIM P(10000) ;可按需要设置 OPEN "B",1,"PCX.PCX" ;注意,必须用二进制方式打开PCX文件! GET #1,14,BPD ;读取重要信息 GET #1,5,X1 GET #1,7,Y1 GET #1,9,X2 GET #1,11,Y2 P(0)=X2-X1+1 ;设定图形宽度 P(0)=Y2-Y1+1 ;设定图形高度 DEF SEG=VARSEG(P(2)) ;设定段地址 ADDR=VARPTR(P(2)) 设定偏移地址 SEEK #1,129 ;定位,准备解压 DO WHILE NOT EOF(1) GET #1,,TMP IF (ASC(TMP) AND & HCO)=&HCO THEN 判断6、7位Bit是否为1 C=ASC(TMP)-&HCO GET #1,,TMP FOR I=1 TO C POKE ADDR,ASC(TMP) ADDR=ADDR+1 NEXT I ;若是则解压 ELSE POKE ADDR,ASC(TMP) ADDR=ADDR+1 END IF LOOP ;循环至文件末 以后,可根据BPD值和需要,设定图形模式,即可用PUT命令SHOW出想要的图了!