麻烦看一下我这段哪里错了,位图导入后重新导出就不能用了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;

解决方案 »

  1.   

    UpdateResource我以前以用过,但总是不成功。不知道为什么?
      

  2.   

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

  3.   

    ICMGDCHN(紫风铃) 
        BMP文件头占用14B,为什么从第2B读起??
    ---------------------------------------
    谢谢你的关注
    因为第三位开始好象就是对图象内容的描述了,比如压缩格式,像素,长、高等等
    我想这些如果全去掉的话那剩下的数据文件不是变成没意义的编码了吗?
      

  4.   

    谢谢,ICMGDCHN(紫风铃)
    问题已经解决
    我现在想知道是为什么能把全部去掉,导出来依然能够被系统识别
      

  5.   

    cjf0426(cjf0426) 问题解决了吗?强