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来写,不知道怎么写?帮忙啊~~~~~~~
#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来写,不知道怎么写?帮忙啊~~~~~~~
解决方案 »
- 有谁知道蜘蛛图这个效果怎么实现
- 代理上网,无法连接远程服务器上的MSSQL,我用ADSL拨号上网就可以
- DELPHI 拦截IP数据包
- C++函数的delphi调用问题,我是搞不懂了,可能很简单
- 关于2000与98的兼容问题?
- 分析代码?filter
- ***report状态的Listview,点击每个列都可排序,如何实现?***
- 有没有高手给个d2007做的邮件服务器的源码给我
- 谁能用TNmHTTP或者TIDHTTP对网页进行Post数据?
- 关于数据文本文件的读、写的几个小问题。(其实问题挺菜的)
- rmdir()的用法
- Pointer ,pchar ,^char 之间的异同点,我现在越看书越迷糊
其它的 差不多。。