2013-10-18 83 views
0

你好,我試圖減少在delphi一個jpg圖像的質量,問題是,我的代碼,我得到這個錯誤E2010不兼容的類型:「TPersistent」和「串」減少德爾福圖像質量

我代碼是這樣的:

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; 

有人可以幫助我糾正錯誤嗎?

+5

這不是分配,它的LoadFromFile。 – bummi

+0

指定期望類似的對象。使用LoadFromFile作爲@bummy註釋。 –

回答

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圖像對象,並創建TP內部數據源對象的新引用。

5

讓我們看看以下錯誤消息:

Incompatible types: 'TPersistent' and 'string' 

這是很顯然。編譯器希望TPersistent,但是你傳遞了字符串。 Assign方法確實期望TPersistent。要使用分配,你需要有兩個圖形對象。你沒有這個。你有一個圖形對象和一個文件名。

所以分配在這裏沒有用。你需要做的是與LoadFromFile相反的SaveToFile。

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

不要害怕編譯器錯誤。閱讀它們,並試圖弄清楚它們的意思。