0

您好,我正在尝试降低 delphi 中 jpg 图像的质量,问题是我的代码出现此错误 E2010 Incompatible types: 'TPersistent' and '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;

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

4

2 回答 2

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');   

不要害怕编译器错误。阅读它们,并尝试弄清楚它们的含义。

于 2013-10-18T17:19:11.687 回答
5

请学习实际阅读错误信息中的文字。在这种情况下,很明显您正在尝试将字符串传递给需要TPersistent. 检查导致错误的代码会很清楚,TJpegImage.Assign它不需要文件名,而是其他东西。

文档清楚地表明要将某些内容从文件加载到TJpegImage您使用的文件中LoadFromFile

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

它还清楚地记录了TJpegImage.Assign预期和打算做什么(包括两个指向代码示例的链接,一个在 Delphi 中,一个在 C++ 中)。

procedure Assign(Source: TPersistent); override;

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

于 2013-10-18T17:14:39.650 回答