GDI+保存图片时使用原路径为何不行?

fisher_older 2010-09-17 10:08:28
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

哪位大侠能否告诉怎么回事啊?为什么不能覆盖原文件?
...全文
211 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
dinoalex 2010-09-18
  • 打赏
  • 举报
回复
A用于导入,STREAM传给B后后,FREE掉. B再写. 这样子试试

mdejtod 2010-09-18
  • 打赏
  • 举报
回复
因为在使用中
fisher_older 2010-09-18
  • 打赏
  • 举报
回复
那么如果想覆盖原文件,该怎么办?
fisher_older 2010-09-18
  • 打赏
  • 举报
回复
不过我不用ActiveX也行啊?为什么必须用ActiveX?
fisher_older 2010-09-18
  • 打赏
  • 举报
回复
搞定!非常感谢!给分了。
dinoalex 2010-09-18
  • 打赏
  • 举报
回复
TIFF 测过,可行, 记得USES上ActiveX单元
dinoalex 2010-09-18
  • 打赏
  • 举报
回复
忘记把那个多余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;
dinoalex 2010-09-18
  • 打赏
  • 举报
回复

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;
fisher_older 2010-09-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dinoalex 的回复:]
A用于导入,STREAM传给B后后,FREE掉. B再写. 这样子试试
[/Quote]

请教dinoalex,具体该怎么做?
fisher_older 2010-09-18
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 mdejtod 的回复:]
改为 GetEncoderClsid('image/tiff', encoderClsid);
[/Quote]

改过了,不行的。
mdejtod 2010-09-18
  • 打赏
  • 举报
回复
没看到多页的。多页的没研究过
mdejtod 2010-09-18
  • 打赏
  • 举报
回复
改为 GetEncoderClsid('image/tiff', encoderClsid);
fisher_older 2010-09-18
  • 打赏
  • 举报
回复
尝试用另一个TGPImage进行克隆(Img2.Clone)也不行啊,怎么办呢?
fisher_older 2010-09-18
  • 打赏
  • 举报
回复
感谢!但是还有一个问题,麻烦大虾们再帮忙思考一下。
以上方法对bmp等格式当然是适用的,但是对于多页的tif文件,却不适用。
如果我现在需要覆盖原tif图片,应该怎么做?
mdejtod 2010-09-18
  • 打赏
  • 举报
回复

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;
fisher_older 2010-09-18
  • 打赏
  • 举报
回复
感谢楼上兄弟,能否详细一点?能写一点简单的代码最好了。
内容概要:本文针对无刷直流电机驱动的电子机械制动(EMB)执行器,建立了考虑Stribeck摩擦特性的非线性耦合动力学模型,并在Simulink环境中完成了系统级仿真分析。研究综合集成了电机动力学、齿轮传动机构与制动执行机构的动力学特性,构建了高保真的机电一体化系统模型。重点引入Stribeck摩擦模型以精确描述低速工况下执行器内部存在的静摩擦、粘滞摩擦与库仑摩擦之间的过渡行为,有效提升了系统在启停、反向运动等瞬态过程中的动态响应仿真精度。通过多工况仿真验证了模型的有效性,能够准确反映摩擦引起的爬行、滞后与定位误差等非线性现象,为EMB系统的高性能控制算法设计(如摩擦补偿、滑模控制)与结构优化提供了高可信度的仿真平台。; 适合人群:从事汽车电子制动系统、电机驱动控制、机电系统建模与仿真研究的研究生、科研人员及工程技术人员,需具备扎实的机械动力学、自动控制理论基础和MATLAB/Simulink仿真能力。; 使用场景及目标:①用于高精度电子机械制动系统的设计验证与性能预测;②为消除摩擦非线性影响的先进控制策略(如自适应控制、智能控制)提供精确的被控对象模型;③深入探究Stribeck摩擦等非线性因素对系统动态性能(如响应延迟、稳态误差)的作用机理; 阅读建议:读者应结合提供的Simulink模型文件,深入剖析Stribeck摩擦模块的数学实现与参数辨识方法,建议通过改变输入指令(如阶跃、正弦)和负载条件进行对比仿真,以直观理解非线性摩擦对系统动态特性的影响。

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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