微信公众号 
图码生活

每天发布有五花八门的文章,各种有趣的知识等,期待您的订阅与参与
电脑报 1992-2001 十年文章全集
电脑报 1992-2001 十年文章全集
包含从 1992 年 - 2001 年间,两万余篇期刊文章,查询最少输入两个字符
随便看看
读取中
读取中
标题在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出想要的图了!