如何替换EXE资源文件中的位图?

cjf0426 2004-11-05 05:51:36
麻烦看一下我这段哪里错了,位图导入后重新导出就不能用了

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;
...全文
483 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
hottey 2004-11-10
  • 打赏
  • 举报
回复
cjf0426(cjf0426) 问题解决了吗?强
cjf0426 2004-11-10
  • 打赏
  • 举报
回复
谢谢,ICMGDCHN(紫风铃)
问题已经解决
我现在想知道是为什么能把全部去掉,导出来依然能够被系统识别
cjf0426 2004-11-10
  • 打赏
  • 举报
回复
ICMGDCHN(紫风铃)
BMP文件头占用14B,为什么从第2B读起??
---------------------------------------
谢谢你的关注
因为第三位开始好象就是对图象内容的描述了,比如压缩格式,像素,长、高等等
我想这些如果全去掉的话那剩下的数据文件不是变成没意义的编码了吗?
ICMGDCHN 2004-11-09
  • 打赏
  • 举报
回复
BMP文件头

typedef struct tagBITMAPFILEHEADER
{
WORD bfType; // 位图文件的类型,必须为BM
DWORD bfSize; // 位图文件的大小,以字节为单位
WORD bfReserved1; // 位图文件保留字,必须为0
WORD bfReserved2; // 位图文件保留字,必须为0
DWORD bfOffBits; // 位图数据的起始位置,以相对于位图
// 文件头的偏移量表示,以字节为单位
} BITMAPFILEHEADER;

BMP文件头占用14B,为什么从第2B读起??
whitetiger8 2004-11-09
  • 打赏
  • 举报
回复
没用过
cjf0426 2004-11-09
  • 打赏
  • 举报
回复
查了资料,说必须把位图的文件头去掉,不知道如何去
cjf0426 2004-11-06
  • 打赏
  • 举报
回复
请帮忙看看,谢谢
hottey 2004-11-06
  • 打赏
  • 举报
回复
UpdateResource我以前以用过,但总是不成功。不知道为什么?
zdq801104 2004-11-05
  • 打赏
  • 举报
回复
不会,UP
zwb666 2004-11-05
  • 打赏
  • 举报
回复
ding

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧