procedure TFormBrowse.Button1Click(Sender: TObject);
var
  encoderClsid: TGUID;
  stat: TStatus;
  Image: TGPImage;
begin
   Image := TGPImage.Create('GrapeBunch.bmp');   // Get the CLSID of the PNG encoder.
   GetEncoderClsid('image/bmp', encoderClsid);
   stat := image.Save('GrapeBunch.bmp', encoderClsid, nil);   if(stat = Ok) then
      memo1.Lines.Add('GrapeBunch.bmp was saved successfully')
   else
      memo1.Lines.Add(format('Failure: stat = %s', [GetStatus(stat)]));    image.Free;
end;
 结果:Failure: stat = Win32Error 哪位大侠能否告诉怎么回事啊?为什么不能覆盖原文件?

解决方案 »

  1.   

    A用于导入,STREAM传给B后后,FREE掉. B再写. 这样子试试
      

  2.   


    procedure TFormBrowse.Button1Click(Sender: TObject);
    var
      encoderClsid: TGUID;
      stat: TStatus;
      Image: TGPBitmap;
      BmpSave : TGPBitmap;
      Gd : TGpGraphcis;
    begin
      Image := TGPImage.Create('GrapeBunch.bmp');
      BmpSave := TGpBitmap.Create(Image.GetWidth,Image.GetHeight,Image.GetPixelFormat);
      Gd := TGpGraphics.Create(BmpSave);
      Gd.DrawImage(Image,0,0);
      freeandnil(Gd);
      Freeandnil(Image);  // Get the CLSID of the PNG encoder.
      GetEncoderClsid('image/bmp', encoderClsid);
      stat := BmpSave.Save('GrapeBunch.bmp', encoderClsid, nil);
      Freeandnil(BmpSave);
      if(stat = Ok) then
        memo1.Lines.Add('GrapeBunch.bmp was saved successfully')
      else
        memo1.Lines.Add(format('Failure: stat = %s', [GetStatus(stat)]));  
    end;
      

  3.   

    感谢!但是还有一个问题,麻烦大虾们再帮忙思考一下。
    以上方法对bmp等格式当然是适用的,但是对于多页的tif文件,却不适用。
    如果我现在需要覆盖原tif图片,应该怎么做?
      

  4.   

    尝试用另一个TGPImage进行克隆(Img2.Clone)也不行啊,怎么办呢?
      

  5.   

    改为 GetEncoderClsid('image/tiff', encoderClsid);
      

  6.   


    请教dinoalex,具体该怎么做?
      

  7.   


    procedure TForm1.Button1Click(Sender: TObject);
    var
      encoderClsid: TGUID;
      stat: TStatus;
      Image1,Image2: TGPImage;
      s: IStream;
      ms: tmemorystream;
    begin
      Image1 := TGPImage.Create('B.bmp');
      GetEncoderClsid('image/png', encoderClsid);
      image1.Free;
      ms:= TMemoryStream.Create;
      ms.LoadFromFile('B.bmp');
      s := TStreamAdapter.Create(ms);
      image2:= TGPImage.Create(s);
      stat := image2.Save('B.bmp', encoderClsid, nil);
      ms.Free;
      image2.Free;
      s:= nil;
      if(stat = Ok) then
      memo1.Lines.Add('GrapeBunch.bmp was saved successfully')
      else
      memo1.Lines.Add(format('Failure: stat = %s', [GetStatus(stat)]));
    end;
      

  8.   

    忘记把那个多余IMAGE1的删除了
    procedure TForm1.Button1Click(Sender: TObject);
    var
      encoderClsid: TGUID;
      stat: TStatus;
      Image: TGPImage;
      s: IStream;
      ms: tmemorystream;
    begin
      GetEncoderClsid('image/png', encoderClsid);
      ms:= TMemoryStream.Create;
      ms.LoadFromFile('GrapeBunch.bmp');
      s := TStreamAdapter.Create(ms);
      image:= TGPImage.Create(s);
      stat := image.Save('GrapeBunch.bmp', encoderClsid, nil);
      ms.Free;
      image.Free;
      s:= nil;
      if(stat = Ok) then
      memo1.Lines.Add('GrapeBunch.bmp was saved successfully')
      else
      memo1.Lines.Add(format('Failure: stat = %s', [GetStatus(stat)]));
    end;
      

  9.   

    TIFF 测过,可行, 记得USES上ActiveX单元
      

  10.   

    不过我不用ActiveX也行啊?为什么必须用ActiveX?