你好我试图在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;
有人可以帮我纠正错误吗?
答案 0 :(得分:5)
请学习实际阅读错误消息中的单词。在这种情况下,很明显您正在尝试将字符串传递给期望TPersistent
的字符串。检查导致错误的代码会非常清楚TJpegImage.Assign
不期望文件名,而是其他内容。
documentation表明要将文件中的内容加载到使用LoadFromFile
的TJpegImage
:
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');
不要害怕编译错误。阅读它们,并尝试找出它们的含义。