麻烦看一下我这段哪里错了,位图导入后重新导出就不能用了function TFrmMain.ReplaceMediaRes(SrcFileName:String;MediaFileName:String):Boolean;
var
bitmap:TBitmap;
MM:TMemorystream;
buffer:PChar;
hUpdateRes:THandle;
begin
result:=false;
if not FileExists(SrcFileName) then begin
MessageBox(Handle,pchar('打开文件:'+SrcFileName+'出错'),pchar(Application.Title),MB_ICONERROR);
exit;
end;
if not (FileExists(MediaFileName)) then begin
MessageBox(Handle,pchar('打开文件:'+MediaFileName+'出错'),pchar(Application.Title),MB_ICONERROR);
exit;
end; MM:=TMemorystream.Create;
bitmap:=TBitmap.Create;
bitmap.LoadFromFile(MediaFileName);
bitmap.SaveToStream(MM);
MM.Position:=2; //MM.Position:=0也试过,不行,有人说要去掉头文件,我就从第2开始读了
try
GetMem(buffer,MM.Size-2);
try
mm.ReadBuffer(buffer^,MM.Size-2);
//开始更新资源
hUpdateRes:=BeginUpdateResource(pchar(SrcFileName),false);
if(hUpdateRes=0) then begin
MessageBox(Handle,pchar('开始修改资源出现异常.'),pchar(Application.Title),MB_ICONERROR);
exit;
end;
result:=UpdateResource(hUpdateRes,RT_BITMAP,MAKEINTRESOURCE(1),MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),buffer,MM.Size-2);
if not result then begin
MessageBox(Handle,pchar('修改资源出现异常。'),pchar(Application.Title),MB_ICONERROR);
exit;
end;
if not EndUpdateResource(hUpdateRes,false) then begin
MessageBox(Handle,pchar('修改资源结束出现异常.'),pchar(Application.Title),MB_ICONERROR);
exit;
end;
finally
FreeMem(buffer);
end;
finally
mm.Free;
end;
result:=true;
end;
var
bitmap:TBitmap;
MM:TMemorystream;
buffer:PChar;
hUpdateRes:THandle;
begin
result:=false;
if not FileExists(SrcFileName) then begin
MessageBox(Handle,pchar('打开文件:'+SrcFileName+'出错'),pchar(Application.Title),MB_ICONERROR);
exit;
end;
if not (FileExists(MediaFileName)) then begin
MessageBox(Handle,pchar('打开文件:'+MediaFileName+'出错'),pchar(Application.Title),MB_ICONERROR);
exit;
end; MM:=TMemorystream.Create;
bitmap:=TBitmap.Create;
bitmap.LoadFromFile(MediaFileName);
bitmap.SaveToStream(MM);
MM.Position:=2; //MM.Position:=0也试过,不行,有人说要去掉头文件,我就从第2开始读了
try
GetMem(buffer,MM.Size-2);
try
mm.ReadBuffer(buffer^,MM.Size-2);
//开始更新资源
hUpdateRes:=BeginUpdateResource(pchar(SrcFileName),false);
if(hUpdateRes=0) then begin
MessageBox(Handle,pchar('开始修改资源出现异常.'),pchar(Application.Title),MB_ICONERROR);
exit;
end;
result:=UpdateResource(hUpdateRes,RT_BITMAP,MAKEINTRESOURCE(1),MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),buffer,MM.Size-2);
if not result then begin
MessageBox(Handle,pchar('修改资源出现异常。'),pchar(Application.Title),MB_ICONERROR);
exit;
end;
if not EndUpdateResource(hUpdateRes,false) then begin
MessageBox(Handle,pchar('修改资源结束出现异常.'),pchar(Application.Title),MB_ICONERROR);
exit;
end;
finally
FreeMem(buffer);
end;
finally
mm.Free;
end;
result:=true;
end;
{
WORD bfType; // 位图文件的类型,必须为BM
DWORD bfSize; // 位图文件的大小,以字节为单位
WORD bfReserved1; // 位图文件保留字,必须为0
WORD bfReserved2; // 位图文件保留字,必须为0
DWORD bfOffBits; // 位图数据的起始位置,以相对于位图
// 文件头的偏移量表示,以字节为单位
} BITMAPFILEHEADER;BMP文件头占用14B,为什么从第2B读起??
BMP文件头占用14B,为什么从第2B读起??
---------------------------------------
谢谢你的关注
因为第三位开始好象就是对图象内容的描述了,比如压缩格式,像素,长、高等等
我想这些如果全去掉的话那剩下的数据文件不是变成没意义的编码了吗?
问题已经解决
我现在想知道是为什么能把全部去掉,导出来依然能够被系统识别