看到本版区有几篇关于显示BMP文件的文章,我也来凑凑热闹,说说几句。
一是把整个图像调进内存。如果是用TP7,能用的内存是有限的,想把比较大的图像,例如640*480整幅调进内存没法简单实现。二是没校正调色板,那么就只能用缺省的颜色来显示。没有校正调色板的图像显示是无意义的。

下面程序是显示16色无压缩的BMP图像。关于如何将压缩的BMP文件转换成无压缩文件,请参阅我那篇256色BMP文件显示文章的回复。不追求显示速度,其实16色BMP文件的显示可以很简单。(^_^)

(*
    16 colors non_compressed BMP file display demo.
    Programmed by j.t.Chang.
*)
uses graph;
var
   gd, gm : integer;
   fn     : string;
   f      : file;
   Width , Height : integer;
   t      : array[1..2] of byte;
   pal    : array[0..47] of byte;

procedure Loadpalette;
var
   t1,t2  : word;
   k      : byte;
   t      : array[0..3] of byte;
begin
    seek(f,54);
    for k :=  0  to 15 do
      begin
          blockread(f,t,4);
          pal[3*k+2] := t[0] shr 2;
          pal[3*k+1] := t[1] shr 2;
          pal[3*k]   := t[2] shr 2;
      end;
    for k:=0 to 15 do
      begin
         asm mov ah,10h
             mov al,0
             mov bh,k
             mov bl,k
             int 10h
         end;
      end;
    t1:=OFS(pal);
    t2:=SEG(pal);
    asm mov ax,1012h
        mov bx,0
        mov cx,16
        mov dx,t1
        mov es,t2
        int 10h
    end;
end;

procedure  DrawBmp;
var  x, y,i : integer;
     c      : array[1..1] of byte;
begin
    seek(f,118);
    i := (Width+7) div 8;
    i := i * 4;
    for y :=  Height - 1 downto 0 do
      begin
       for x:=0 to i-1 do
       begin
         blockread(f,c,1);
         if 2*x < Width then putpixel(2*x,y,c[1] shr 4);
         if 2*x+1 < Width then putpixel(2*x+1,y,c[1] and $F);
       end;
     end;
end;

Begin
  write('Enter 16 colors Bmp filename : ');
  readln(fn);
  assign(f,fn);
  reset(f,1);
  seek(f,18);
  blockread(f,t,2);
  Width := 1;       Height := 1;
  Width := Width*t[2]*256 + t[1];
  blockread(f,t,2);
  blockread(f,t,2);
  Height := Height*t[2]*256 + t[1];
  gd := Detect;
  initgraph(gd,gm,' ');
  if graphresult <> grOk then
     begin
        close(f);
        halt;
     end;
  Loadpalette;
  DrawBmp;
  close(f);
  readln;
  closeGraph;
End.

==============================

相关链接:
[url=http://www.programfan.com/club/showbbs.asp?id=14262]TP7下显示256色的BMP文件[/url]

BMP格式的DOS转换工具在[url]http://jtchang.ys168.com[/url]网络硬盘TP7\Bmpdemo.zip里提供一个Alchemy.exe
使用方法:
转换成16色bmp文件的命令行为:
alchemy -c16 -w 源文件 目标文件

转换成256色bmp文件的命令行为:
alchemy -c256 -w 源文件 目标文件

包里有我从网上广告图片转换出来的两个bmp文件,一个是16色,另一个是256色。