2014-03-30 58 views
1

此代碼:如何加載JPE圖像文件?

uses 
    Vcl.Imaging.jpeg... 
... 
ThisPicture := TPicture.Create; 
try 
    ThisPicture.LoadFromFile('MyImage.JPE'); // error 
    ... 
finally 
    ThisPicture.Free; 
end; 

生成此錯誤:

EInvalidGraphic: Unknown picture file extension <.jpe> 

雖然Vcl.Imaging.jpeg被使用。 JPG和JPEG可以毫無問題地加載。

Wikipedia解釋說,.jpg,.jpeg,.jpe .jif,.jfif,.jfi是JPEG格式的擴展。

那麼如何使用LoadFromFile('MyImage.JPE')沒有錯誤?

+2

調用'TPicture.RegisterFileFormat('jpe','JPE Image File',TJPEGImage);'在你程序啓動的某處。 – TLama

+0

@TLama來自TLama和David Heffernan的解決方案都能奏效,這要歸功於兩者!但由於通常我更喜歡使用您的解決方案的最簡單的解決方案,因此請將其添加爲答案。 – user1580348

回答

3

JPE擴展未由Delphi JPEG代碼註冊。因此錯誤。既然你知道圖像類型,你可以直接把它加載到TJPEGImage對象中:

Image := TJPEGImage.Create; 
Image.LoadFromFile(...); 

並賦值給圖片控件。

ThisPicture.Assign(Image); 

或登記的JPE擴展的簡單的解決方案,使TPictureTJPEGImage同夥。這可以通過使用TPicture.RegisterFileFormat做到:

uses 
    Vcl.Imaging.JConsts, Vcl.Imaging.jpeg; 
.... 
TPicture.RegisterFileFormat('jpe', sJPEGImageFile, TJPEGImage); 
TPicture.RegisterFileFormat('jif', sJPEGImageFile, TJPEGImage); 
TPicture.RegisterFileFormat('jfif', sJPEGImageFile, TJPEGImage); 
TPicture.RegisterFileFormat('jfi', sJPEGImageFile, TJPEGImage); 

對於什麼是值得的RegisterFileFormat文檔包含這個相當古樸行:

The AExtension parameter specifies the three-character system file extension to associate with the graphic class (for example, "bmp" is associated with TBitmap).

不要擔心的建議,即擴展必須要準確三個字符的長度。這只是一個文檔錯誤。

+1

除非已指向現有的'TJPEGImage',否則不能將'TJPEGImage'指派給'TPicture.Graphic'。更好地分配'()'的'TPicture'本身無論代替更新其當前類型的'Graphic':'ThisPicture.Assign(圖像);' –

+0

@Remy謝謝 –