在delphi中降低图像质量

时间:2013-10-18 16:54:40

标签: delphi

你好我试图在delphi中降低jpg图像的质量,问题是我的代码我得到了这个错误E2010不兼容的类型:'TPersistent'和'string'

我的代码是:

   TForm1.Button4Click procedure (Sender: TObject);
   var
     imagen2: TJpegImage;
   begin

     image2: = TJpegImage.Create;
     imagen2.Assign ('c:/test.jpg');
     imagen2.CompressionQuality: = 60;
     imagen2.SaveToFile ('c:/test.jpg');

   end;

有人可以帮我纠正错误吗?

2 个答案:

答案 0 :(得分:5)

请学习实际阅读错误消息中的单词。在这种情况下,很明显您正在尝试将字符串传递给期望TPersistent的字符串。检查导致错误的代码会非常清楚TJpegImage.Assign不期望文件名,而是其他内容。

documentation表明要将文件中的内容加载到使用LoadFromFileTJpegImage

imagen2 := TJpegImage.Create;
imagen2.LoadFromFile('c:\test.jpg');

它还清楚地记录了TJpegImage.Assign期望的内容,以及它的目的(包括两个代码示例链接,一个在Delphi中,一个在C ++中)。

procedure Assign(Source: TPersistent); override;
  

复制jpeg图像对象并创建内部数据源对象的新引用。

答案 1 :(得分:5)

让我们看一下错误信息:

Incompatible types: 'TPersistent' and 'string'

这很清楚。编译器期望TPersistent,但是你传递了字符串。 Assign方法确实期望TPersistent。要使用assign,您需要有两个图形对象。你没有那个。你有一个图形对象和一个文件名。

所以分配在这里没用。你需要做的是SaveToFile的反转,它是LoadFromFile。

imagen2.LoadFromFile('c:\test.jpg'); 
imagen2.CompressionQuality := 60;
imagen2.SaveToFile ('c:\test.jpg');   

不要害怕编译错误。阅读它们,并尝试找出它们的含义。