json qbytearray 串 转_如何通过QByteArray在JSON中存储QPixmap?
無法從任意QByteArray構(gòu)造QString.您需要對字節(jié)數(shù)組進行編碼,使其可以首先轉(zhuǎn)換為字符串.從C語義的角度來看,QString可以從QByteArray構(gòu)造出來,這有點誤導(dǎo).它是否真的可構(gòu)建取決于QByteArray中的內(nèi)容.
QByteArray :: toBase64和fromBase64是這樣做的一種方式.
由于您希望保存像素圖而不會丟失其內(nèi)容,因此不應(yīng)將其保存為有損格式,如JPG.請改用PNG.如果您在執(zhí)行完整的json-> pixmap-> json電路時沒有重復(fù)加載和存儲相同的像素圖,則僅使用JPG.
還有另一個問題:對于要存儲或加載自身的pixmap,它需要在內(nèi)部轉(zhuǎn)換為/從QImage轉(zhuǎn)換.這涉及潛在的顏色格式轉(zhuǎn)換.此類轉(zhuǎn)換可能會丟失數(shù)據(jù).您必須小心確保以相同的格式進行任何往返.
理想情況下,您應(yīng)該使用QImage而不是QPixmap.在現(xiàn)代的Qt中,無論如何,QPixmap只是QImage的一個薄包裝器.
// https://github.com/KubaO/stackoverflown/tree/master/questions/pixmap-to-json-32376119
#include
QJsonValue jsonValFromPixmap(const QPixmap &p) {
QBuffer buffer;
buffer.open(QIODevice::WriteOnly);
p.save(&buffer,"PNG");
auto const encoded = buffer.data().toBase64();
return {QLatin1String(encoded)};
}
QPixmap pixmapFrom(const QJsonValue &val) {
auto const encoded = val.toString().toLatin1();
QPixmap p;
p.loadFromData(QByteArray::fromBase64(encoded),"PNG");
return p;
}
int main(int argc,char **argv) {
QGuiApplication app{argc,argv};
QImage img{32,32,QImage::Format_RGB32};
img.fill(Qt::red);
auto pix = QPixmap::fromImage(img);
auto val = jsonValFromPixmap(pix);
auto pix2 = pixmapFrom(val);
auto img2 = pix2.toImage();
Q_ASSERT(img == img2);
}
總結(jié)
以上是生活随笔為你收集整理的json qbytearray 串 转_如何通过QByteArray在JSON中存储QPixmap?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 男26岁 血常规检查费用 你好血常规五分
- 下一篇: 求一个qq网名女生7个字!