2015-06-08 34 views
0

獲得的圖像類型,我試圖從QImage的作爲的QString獲取圖像類型,這裏是我使用的代碼:從QImage的

QImageReader reader(filename); 
QByteArray filetype_ba = reader.format(); 
QString filetype_qs(filetype_ba); 

它的工作原理。但是當我重命名文件時,例如從image.png到image.jpg,它會返回空值。這是否意味着QImageReader從文件名讀取而不是fileheader?我想從頭文件中獲取圖像類型,所以即使我重命名文件(而不是轉換),它仍然會給我正確的類型。

+0

你剛剛重命名文件或將其從png轉換爲jpg嗎? – RedX

+0

只是重命名它。 – yangsunny

+0

'QImage * image = new QImage(filename)'是什麼意思?'? – UmNyobe

回答

0

QImageReader documentation specify the following steps

  1. 圖片插件查詢第一的基礎上,無論是可選的格式字符串,或者文件名後綴
  2. 如果沒有插件支持的圖像格式,Qt的內置根據可選格式字符串或文件名 後綴檢查處理程序
  3. 如果找不到有能力的插件或內置處理程序,則每個插件都會通過檢查數據流的內容進行測試。
  4. 如果沒有插件可以根據數據內容檢測圖像格式,則通過檢查內容來測試每個內置圖像處理程序。
  5. 最後,如果以上所有方法均失敗,則嘗試讀取圖像時,QImageReader將報告 失敗。

看來,處理程序匹配的文件擴展名,並說:「嘿,我完全可以讀到」不檢查的內容,因爲你承擔。通過(良好的)設計,jpeg處理程序應該只處理jpeg而沒有其他處理。

事情是QImage行爲不同,因爲它直接看文件數據流來猜測格式。看起來你應該將你的檢測基於Qimage機制。

注: 此描述的默認行爲,這是一樣的QImageReader::setAutoDetectImageFormat(true)。假意味着你,程序員應該使用第二個參數或其他方法來設置圖像類型。

+0

這就是我第一次嘗試。我查看了Qt的QImage-Class文檔,但找不到任何方法直接從QImage獲取圖像類型(或者我只是盲目...) – yangsunny

+0

找到了一些東西,但我不知道爲什麼它(不)工作。首先,我發現'QImageReader :: setAutoDetectImageFormat(bool enabled)'並將其設置爲false,但現在我根本沒有從'reader.format()'中得到任何東西,甚至沒有從原來的那個我沒有重命名的東西。然後我忽略了設置'QImageReader :: setDecideFormatFromContent(忽略bool)',這也禁止自動檢測圖像格式。有了這個,我總是可以獲得正確的圖像類型,但是我無法通過'QSize size = image-> size()獲取高度和寬度。 size.height(); size.width();'不再...爲什麼? – yangsunny