100分求救啊!!!!!!!!!不够可以再加!!!!!!!!!!!C++代码如下:#include <dir.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <string.h>class OpenInputFile_Error{};
class OpenOutputFile_Error{};
class OpenTosFile_Error{};
class InputFileData_Error{};class BmpBasic 
{
        protected:
                char (*palette)[3];
                ifstream InFile;
                ofstream OutFile;
                int WidthBas, HeightBas;
                long *Curys;
                unsigned char *DataLine;                void  fputl(unsigned long);
                void  fputsh(unsigned short);
                void  SetWidth(int);
                void  SetHeight(int);
                int   GetWidth();
                int   GetHeight(); void  Convert_16(char *InFileName,char *OutFileName);
                virtual void  InitCurys();
                virtual void  ReadLine(int);
                virtual void  SaveBmpHead_16(void);
                virtual void  SaveBmpBody_16(void);
        public:
                 BmpBasic(char (*palette)[3]);
                virtual  ~BmpBasic();
                virtual void Convert(char *InFileName,char *OutFileName);
};class agp2bmp :public BmpBasic
{
    protected:
            virtual void  InitCurys();
            virtual void  ReadLine(int);     public:
             agp2bmp(char (*palette)[3]);
             ~agp2bmp();
};
//---------------------------------------------------------------------------
BmpBasic::BmpBasic(char (*palette)[3])
{
    BmpBasic::palette=palette;
    Curys=new long[4096];
    DataLine=new unsigned char[4096];
}BmpBasic::~BmpBasic()
{
    delete Curys;
    delete DataLine;
    if(!InFile.fail())
     InFile.close();
    if(!OutFile.fail())
     OutFile.close();
}
void 
BmpBasic::SetWidth(int Width)
{
    BmpBasic::WidthBas=Width;
}
void 
BmpBasic::SetHeight(int Height)
{
    BmpBasic::HeightBas=Height;
}
int 
BmpBasic::GetWidth(void)
{
    return(WidthBas);
}
int 
BmpBasic::GetHeight(void)
{
    return(HeightBas);
}void 
BmpBasic::fputl(unsigned long data)
{
    register union L
    {
        unsigned char b[4];
        unsigned long  s;
    }temp;
    temp.s=data;
    OutFile<<temp.b[0]<<temp.b[1]<<temp.b[2]<<temp.b[3];
}void 
BmpBasic::fputsh(unsigned short data)
{
    register union sh
    {
        unsigned char b[2];
        unsigned short s;
    }temp;
    temp.s=data;
    OutFile<<temp.b[0]<<temp.b[1];
}void 
BmpBasic::InitCurys(void)
{}void 
BmpBasic::ReadLine(int Cury)
{}void  
BmpBasic::SaveBmpHead_16(void)
{
    //******** BMP INFO ************
    OutFile.put('B');
    OutFile.put('M');
    fputl((unsigned long)(HeightBas)*(unsigned long)(WidthBas)/(unsigned long)2+118);
    fputl(0);
    fputl((unsigned long)118);
    fputl((unsigned long)0x28);
    fputl((unsigned long)(WidthBas));
    fputl((unsigned long)(HeightBas));
    fputsh(1);
    fputsh(4);
    fputl((unsigned long)0);
    fputl((unsigned long)0);
    fputl((unsigned long)0);
    fputl((unsigned long)0);
    fputl((unsigned long)0);
    fputl((unsigned long)0);    //********* BMP COLOR ***********
    for(int i=0;i<16;i++)
    {
        OutFile<<(unsigned char)(palette[i][0]);
        OutFile<<(unsigned char)(palette[i][1]);
        OutFile<<(unsigned char)(palette[i][2]);
        OutFile<<(unsigned char)0x00;
    }
}
void 
BmpBasic::SaveBmpBody_16(void)
{
    static unsigned char SaveData[2048];    for(int Cury=HeightBas-1;Cury>=0;Cury--)
    {
        ReadLine(Cury);
        for(int j=0;j<WidthBas;j++,j++)
            SaveData[j/2]=(unsigned char)((DataLine[j]<<4)|DataLine[j+1]);
        OutFile.write((char*)SaveData,WidthBas/2);
    }
}
void
BmpBasic::Convert(char *InFileName,char *OutFileName)
{
   Convert_16(InFileName,OutFileName);
}void 
BmpBasic::Convert_16(char *InFileName,char *OutFileName)
{
    InFile.open(InFileName,ios::in|ios::binary);
    if(InFile.fail())
        throw OpenInputFile_Error();
    OutFile.open(OutFileName,ios::out|ios::binary);
    if(OutFile.fail())
        throw OpenOutputFile_Error();    InitCurys();
    SaveBmpHead_16();
    SaveBmpBody_16();    InFile.close();
    OutFile.close();
}//-------------------------------------------------------------------------agp2bmp::agp2bmp(char (*palette)[3]):BmpBasic(palette)
{}
inline
agp2bmp::~agp2bmp()
{}void 
agp2bmp::InitCurys()
{
    int LineNum=0;
    for(int i=0;i<512;i++)
        Curys[LineNum++]=512L+(long)i*512L;    SetWidth(512);
    SetHeight(512);}
void 
agp2bmp::ReadLine(int Cury)
{
     static unsigned char
     AgpBuf256[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,
                2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,
                3,3,3,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,
                5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,
                7,7,7,8,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,9,10,
                10,10,10,10,10,10,11,11,11,11,11,11,11,12,12,
                12,12,12,12,12,13,13,13,13,13,14,14,14,14,14,
                15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,
                15,15,15,15,15};    InFile.seekg(Curys[Cury],ios::beg);
    InFile.read((char*)DataLine,512);
    for(register int i=0;i<512;i++)
       DataLine[i]=AgpBuf256[DataLine[i]];
}
//---------------------------------------------------------------------------
main()
{
    static char
    agp1[][3]={{0x00,0x00,0x00},{0xbc,0x00,0x00},{0xfc,0x40,0x40},
                {0xfc,0x68,0x68},{0xfc,0xa0,0xa0},{0x60,0x60,0xfc},
                {0x80,0x80,0xfc},{0xa0,0xa0,0xfc},{0x00,0xbc,0x00},
                {0x40,0xe0,0x40},{0x80,0xfc,0x80},{0xc0,0xfc,0xc0},
                {0x00,0xf4,0xfc},{0x54,0xfc,0xfc},{0xa8,0xfc,0xfc},
                {0xfc,0xfc,0xfc}};    static char
    agp2[][3]={{0x00,0x00,0x00},{0xbc,0x00,0x00},{0xfc,0x00,0x00},
                {0xfc,0x7c,0x40},{0xfc,0xbc,0x7c},{0x40,0x80,0xfc},
                {0xc0,0x98,0xfc},{0xfc,0xc0,0xfc},{0x08,0x98,0x08},
                {0x80,0xd4,0x00},{0xc0,0xe8,0x98},{0xd4,0xfc,0xc0},
                {0x00,0xd4,0xd4},{0x00,0xf0,0xf0},{0xc0,0xfc,0xfc},
                {0xfc,0xfc,0xfc}};
    static char
    agp3[][3]={{10,2,1},{37,10,5},{65,17,10},
                {94,23,13},{121,30,17},{149,37,21},
                {176,45,26},{205,51,29},{224,65,41},
                {228,89,69},{240,132,137},{240,164,153},
                {244,189,181},{249,214,208},{252,239,237},
                {255,255,255}};
                    
     AGPPalette=agp3;                                    
     agp2bmp *a2b=new agp2bmp(AGPPalette);               
                                                         
     try                                                 
     {                                                     
         a2b->Convert(PictureName,TempBmpFileName);        
     }                                                                                    
     catch(...)                                            
     {                                                     
                                                           
     }                                                   
     delete a2b;                                           
     remove(TempBmpFile);                                  
       
}                        我现在要用DELPHI来写,不知道怎么写?帮忙啊~~~~~~~