[問題] QMovie 不吃 QZipReader 的fileData

作者: liu2007 (è–¯)   2021-02-25 01:43:01
我的開發平台是 win7
工具是QT Creator
版本是Qt Core 5.15.2
我採用內建的 QZipReader (#include "private/qzipreader_p.h")
來讀取zip壓縮檔內的單一檔案,然後顯示
當讀取壓縮檔內的bmp, png, jpg時
我用QImage來讀取圖片可成功讀取
mPath = "F:/image/myzip.zip";
path = "myzip.zip/01.jpg";
mZipReader = new QZipReader(mPath);
QByteArray data{mZipReader->fileData(path)};
bool isSuccessed = image.loadFromData(data,"JPG");
但是如果要讀取的檔案是GIF檔
則無論用QImageReader 或是 QMovie 都無法成功讀取
mPath = "F:/image/myzip.zip";
path = "myzip.zip/1445806472.gif";
mZipReader = new QZipReader(mPath);
QByteArray data{mZipReader->fileData(path)};
QMovie *movie = new QMovie(data, "GIF");
qDebug() << movie->isValid(); //false
qDebug() << movie->lastErrorString(); //"File not found"
qDebug() << movie->fileName(); // "GIF89a\u0016\u0002B\u0001?"
想請問除了換用其他的lib之外,還有其他讀取壓縮檔內gif可行的辦法嗎?
感謝閱讀
作者: john790710 (虎)   2021-02-25 09:40:00
QMovie是要給IODevicehttps://imgur.com/J6piuqu
作者: nh60211as   2021-02-25 10:08:00
還有你的path是不是錯了,我用Qt 5.15.1要打"01.jpg"才能讀檔,不是"myzip.zip/01.jpg",不過有可能是行為變更
作者: pinefruit (莫使惹塵埃)   2021-02-25 16:24:00
看了你的程式碼,問題出在 QByteArray 和 QBuffer 物件都是區域變數,當建構式一結束這兩個物件就銷毀了。所以 movie->start() 才會 crash。在 movie 播放 GIF 期間,這兩個物件都必須活著才行。

Links booklink

Contact Us: admin [ a t ] ucptt.com