unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, Menus;type
  TFormRGBValues = class(TForm)
    ButtonReadBMP: TButton;
    OpenDialog1: TOpenDialog;
    procedure ButtonReadBMPClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  FormRGBValues: TFormRGBValues;implementation{$R *.dfm}
const   
          FileSignature   =   'RGB:';   
    
  type   
          TRGBTripleArray   =   array[WORD]   of   TRGBTriple;   
          pRGBTripleArray   =   ^TRGBTripleArray;   
procedure   BitmapToRGBValues(const   BMPFilename:   string;   
          const   DataFilename:   string);   
  var   
          Bitmap:   TBitmap;   
          DataFile:   TextFile;   
          i:   INTEGER;   
          j:   INTEGER;   
          row:   pRGBTripleArray;   
  begin   
          Bitmap   :=   TBitmap.Create;   
          try   
                  Bitmap.LoadFromFile(BMPFilename);   
    
                  Bitmap.PixelFormat   :=   pf24bit;   
                  //   24bit位图   
                  Assignfile(DataFile,   DataFilename);   
                  REWRITE(DataFile);   
                  //打开文本文件   
                  WRITELN(DataFile,   FileSignature);   
                  //写入文件签名   
                  WRITELN(DataFile,   Bitmap.Width,   '   ',   Bitmap.Height);   
                  //文件大小   
    
                  for   j   :=   0   to   Bitmap.Height   -   1   do   
                  begin   
                          row   :=   Bitmap.Scanline[j];   
    
                          WRITE(DataFile,   'R   ');   
                          for   i   :=   0   to   Bitmap.Width   -   1   do   
                          begin   
                                  WRITE(DataFile,   row[i].rgbtRed:   4);   
                                  //输出红色分量到文件,间距为4个位宽   
                          end;   
                          WRITELN(Datafile);   
                          //换行   
                          WRITE(DataFile,   'G   ');   
                          for   i   :=   0   to   Bitmap.Width   -   1   do   
                          begin   
                                  WRITE(DataFile,   row[i].rgbtGreen:   4);   
                                  //输出绿色分量到文件,间距为4个位宽   
                          end;   
                          WRITELN(DataFile);   
                          //换行   
                          WRITE(DataFile,   'B   ');   
                          for   i   :=   0   to   Bitmap.Width   -   1   do   
                          begin   
                                  WRITE(DataFile,   row[i].rgbtBlue:   4);   
                                  //输出蓝色分量到文件,间距为4个位宽   
                          end;   
                          WRITELN(DataFile)   
                                  //换行   
                  end;
                  CloseFile(DataFile);
                  //关闭文件   
          finally   
                  Bitmap.Free   
          end;
  end;procedure TFormRGBValues.ButtonReadBMPClick(Sender: TObject);
begin
  if   opendialog1.Execute   then
          begin   
                  BitmapToRGBValues(opendialog1.filename,   'Pixels.Txt')
          end;end;end.