代码如下: //说明:窗体上有两个Image、两个按钮、一个Edit(用于显示写了多少)。 //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { TMemoryStream *pms=new TMemoryStream(); Image1->Picture->Bitmap->SaveToStream(pms); int N=pms->Size; pms->Position=0; char *buffer=new char[N+1] ; pms->ReadBuffer(buffer,N*sizeof(char)); //对数据进行加密; //..... //开始写文件 int fhwnd; String sfile="PICME.DAT"; if (!FileExists(sfile)) { fhwnd=FileCreate(sfile); FileClose(fhwnd); } fhwnd=FileOpen(sfile,fmOpenWrite); FileSeek(fhwnd,0,2); //移动到文件尾; Edit1->Text = (sizeof(char)*N); FileWrite(fhwnd,buffer,sizeof(char)*N); FileClose(fhwnd); delete []buffer; delete pms; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { TMemoryStream *pms=new TMemoryStream(); String sfile="PICME.DAT"; char *buffer; int fhwnd, iFileLength,N; fhwnd=FileOpen(sfile,fmOpenRead); iFileLength = FileSeek(fhwnd,0,2); FileSeek(fhwnd,0,0); N=(iFileLength+1)/sizeof(char); buffer=new char[N+1]; FileRead(fhwnd,buffer,sizeof(char)*N); //对数据进行解密; //... // pms->Size=N; pms->WriteBuffer(buffer,N*sizeof(char)); pms->Position=0; Image2->Picture->Bitmap->LoadFromStream(pms); FileClose(fhwnd); delete []buffer; delete pms; } //---------------------------------------------------------------------------
其实,你如果要最最最简单的不让别人直接看出来,你把这二处: FileSeek(……); 改成: FileSeek(fhwnd,1024,0); 就完事。 这样,你存出来的图片因为不是从文件的第一个字节开始的,所以不合符标准,这样,别人就会发晕了。 当然,如果别人足够聪明,用十六进制软件打开生成的这个文件,然后猜出来了偏移量,那就没得说了,哈哈。