Delphi6でのパレットについて質問します。

以下のような関数を作りたいです。

GetPal( BMP画像,パレット変数 )
SetPal( BMP画像,パレット変数 )

GetPalは指定されたBMP画像から256色のパレットを読み出して
パレット変数に、格納します。

SetPalは指定されたパレット変数の内容をBMP画像のパレットとして
設定します。

パレット変数の定義
Palette :array[0..255] of Integer;

いろいろ調べたのですが、(過去ログも見ました。)分からないので具体的に
関数を作って教えていただけないでしょうか?

また、このときBMP画像が256色パレットではない場合には、
256色パレットに変換してから、上記の処理をしたいのですが
そういうのは、どうすれば出来るのでしょうか?

具体的には、画面にSelectImage: TImage;というのがあり、そこのBMPに対して
上記の処理を行いたいと思っています。

SelectImage.Picture.LoadFromFile(ImageFileName);
で、BMPを読み込んだ後に、GetPal関数を使ってパレットを取得
パレット編集後に、PutPal関数を使ってパレットを書き換えて
SelectImage.Picture.SaveToFile(ImageFileName);
で、BMPを保存しようと思っています。

よろしくお願いします。