add res cache, fix size bug, support 8K exports
This commit is contained in:
parent
0e6a6ae34a
commit
bb06af8a79
8 changed files with 46 additions and 54 deletions
|
@ -49,30 +49,24 @@ void ExportThread::run()
|
|||
// Quality Settings
|
||||
settings.beginGroup("Pictures");
|
||||
int defaultQuality = 100;
|
||||
QSize defExportSize = SnapmaticPicture::getSnapmaticResolution();
|
||||
int customQuality = settings.value("CustomQuality", defaultQuality).toInt();
|
||||
if (customQuality < 1 || customQuality > 100)
|
||||
{
|
||||
customQuality = 100;
|
||||
}
|
||||
bool useCustomQuality = settings.value("CustomQualityEnabled", false).toBool();
|
||||
|
||||
// Size Settings
|
||||
const QSize defExportSize = QSize(960, 536);
|
||||
QSize cusExportSize = settings.value("CustomSize", defExportSize).toSize();
|
||||
if (cusExportSize.width() > 3840)
|
||||
{
|
||||
cusExportSize.setWidth(3840);
|
||||
if (cusExportSize.width() > 7680) {
|
||||
cusExportSize.setWidth(7680);
|
||||
}
|
||||
else if (cusExportSize.height() > 2160)
|
||||
{
|
||||
cusExportSize.setHeight(2160);
|
||||
else if (cusExportSize.height() > 4320) {
|
||||
cusExportSize.setHeight(4320);
|
||||
}
|
||||
if (cusExportSize.width() < 1)
|
||||
{
|
||||
if (cusExportSize.width() < 1) {
|
||||
cusExportSize.setWidth(1);
|
||||
}
|
||||
else if (cusExportSize.height() < 1)
|
||||
{
|
||||
else if (cusExportSize.height() < 1) {
|
||||
cusExportSize.setHeight(1);
|
||||
}
|
||||
QString sizeMode = settings.value("ExportSizeMode", "Default").toString();
|
||||
|
|
|
@ -84,8 +84,7 @@ ImportDialog::ImportDialog(QString profileName, QWidget *parent) :
|
|||
ui->cmdBackgroundWipe->setVisible(false);
|
||||
|
||||
// Snapmatic Resolution
|
||||
snapmaticResolution = SnapmaticPicture::getSnapmaticResolution();
|
||||
ui->cbResolution->addItem("GTA V", snapmaticResolution);
|
||||
ui->cbResolution->addItem("GTA V", QSize(960, 536));
|
||||
ui->cbResolution->addItem("FiveM", QSize(1920, 1072));
|
||||
ui->cbResolution->addItem("1280x720", QSize(1280, 720));
|
||||
ui->cbResolution->addItem("1920x1080", QSize(1920, 1080));
|
||||
|
@ -371,7 +370,7 @@ void ImportDialog::processSettings(QString settingsProfile, bool setDefault)
|
|||
ui->cbForceAvatarColour->setChecked(settings.value("ForceAvatarColour", false).toBool());
|
||||
ui->cbUnlimited->setChecked(settings.value("UnlimitedBuffer", false).toBool());
|
||||
ui->cbImportAsIs->setChecked(settings.value("ImportAsIs", false).toBool());
|
||||
const QVariant data = settings.value("Resolution", SnapmaticPicture::getSnapmaticResolution());
|
||||
const QVariant data = settings.value("Resolution", QSize(960, 536));
|
||||
#if QT_VERSION >= 0x060000
|
||||
if (data.typeId() == QMetaType::QSize)
|
||||
#else
|
||||
|
@ -431,7 +430,7 @@ void ImportDialog::saveSettings(QString settingsProfile)
|
|||
settings.setValue("Resolution", data);
|
||||
}
|
||||
else {
|
||||
settings.setValue("Resolution", SnapmaticPicture::getSnapmaticResolution());
|
||||
settings.setValue("Resolution", QSize(960, 536));
|
||||
}
|
||||
settings.setValue("UnlimitedBuffer", ui->cbUnlimited->isChecked());
|
||||
settings.setValue("ImportAsIs", ui->cbImportAsIs->isChecked());
|
||||
|
@ -945,7 +944,7 @@ void ImportDialog::on_cbResolution_currentIndexChanged(int index)
|
|||
#endif
|
||||
{
|
||||
const QSize dataSize = data.toSize();
|
||||
if (dataSize == SnapmaticPicture::getSnapmaticResolution()) {
|
||||
if (dataSize == QSize(960, 536)) {
|
||||
ui->cbAvatar->setEnabled(true);
|
||||
snapmaticResolution = dataSize;
|
||||
reworkImage();
|
||||
|
|
|
@ -69,7 +69,7 @@ OptionsDialog::OptionsDialog(ProfileDatabase *profileDB, QWidget *parent) :
|
|||
int desktopSizeWidth = qRound((double)desktopResolution.width() * screenRatioPR);
|
||||
int desktopSizeHeight = qRound((double)desktopResolution.height() * screenRatioPR);
|
||||
aspectRatio = Qt::KeepAspectRatio;
|
||||
defExportSize = SnapmaticPicture::getSnapmaticResolution();
|
||||
defExportSize = QSize(960, 536);
|
||||
cusExportSize = defExportSize;
|
||||
defaultQuality = 100;
|
||||
customQuality = 100;
|
||||
|
@ -519,19 +519,18 @@ void OptionsDialog::setupPictureSettings()
|
|||
|
||||
// Quality Settings
|
||||
customQuality = settings->value("CustomQuality", defaultQuality).toInt();
|
||||
if (customQuality < 1 || customQuality > 100) {
|
||||
if (customQuality < 1 || customQuality > 100)
|
||||
customQuality = 100;
|
||||
}
|
||||
ui->hsPicQuality->setValue(customQuality);
|
||||
ui->cbPicCustomQuality->setChecked(settings->value("CustomQualityEnabled", false).toBool());
|
||||
|
||||
// Size Settings
|
||||
cusExportSize = settings->value("CustomSize", defExportSize).toSize();
|
||||
if (cusExportSize.width() > 3840) {
|
||||
cusExportSize.setWidth(3840);
|
||||
if (cusExportSize.width() > 7680) {
|
||||
cusExportSize.setWidth(7680);
|
||||
}
|
||||
else if (cusExportSize.height() > 2160) {
|
||||
cusExportSize.setHeight(2160);
|
||||
else if (cusExportSize.height() > 4320) {
|
||||
cusExportSize.setHeight(4320);
|
||||
}
|
||||
if (cusExportSize.width() < 1) {
|
||||
cusExportSize.setWidth(1);
|
||||
|
@ -539,7 +538,9 @@ void OptionsDialog::setupPictureSettings()
|
|||
else if (cusExportSize.height() < 1) {
|
||||
cusExportSize.setHeight(1);
|
||||
}
|
||||
ui->sbPicExportWidth->setMaximum(7680);
|
||||
ui->sbPicExportWidth->setValue(cusExportSize.width());
|
||||
ui->sbPicExportHeight->setMaximum(4320);
|
||||
ui->sbPicExportHeight->setValue(cusExportSize.height());
|
||||
|
||||
QString sizeMode = settings->value("ExportSizeMode", "Default").toString();
|
||||
|
|
|
@ -141,8 +141,8 @@ void PictureDialog::setupPictureDialog()
|
|||
smpic = nullptr;
|
||||
crewStr = "";
|
||||
|
||||
// Get Snapmatic Resolution
|
||||
const QSize snapmaticResolution = SnapmaticPicture::getSnapmaticResolution();
|
||||
// Set default Snapmatic resolution (960x536)
|
||||
const QSize snapmaticResolution = QSize(960, 536);
|
||||
|
||||
// Avatar area
|
||||
qreal screenRatio = AppEnv::screenRatio();
|
||||
|
@ -232,7 +232,7 @@ void PictureDialog::addPreviousNextButtons()
|
|||
|
||||
void PictureDialog::adaptDialogSize()
|
||||
{
|
||||
int newDialogHeight = (SnapmaticPicture::getSnapmaticResolution().height() * AppEnv::screenRatio()) + ui->jsonFrame->heightForWidth(width());
|
||||
int newDialogHeight = (960 * AppEnv::screenRatio()) + ui->jsonFrame->heightForWidth(width());
|
||||
if (naviEnabled)
|
||||
newDialogHeight = newDialogHeight + layout()->menuBar()->height();
|
||||
const QSize windowSize(width(), newDialogHeight);
|
||||
|
@ -533,7 +533,7 @@ void PictureDialog::renderPicture()
|
|||
{
|
||||
const qreal screenRatio = AppEnv::screenRatio();
|
||||
const qreal screenRatioPR = AppEnv::screenRatioPR();
|
||||
const QSize snapmaticResolution(SnapmaticPicture::getSnapmaticResolution());
|
||||
const QSize snapmaticResolution = QSize(960, 536);
|
||||
const QSize renderResolution(snapmaticResolution.width() * screenRatio * screenRatioPR, snapmaticResolution.height() * screenRatio * screenRatioPR);
|
||||
QPixmap shownImagePixmap(renderResolution);
|
||||
shownImagePixmap.fill(Qt::black);
|
||||
|
@ -783,6 +783,7 @@ void PictureDialog::editSnapmaticImage()
|
|||
importDialog->setModal(true);
|
||||
importDialog->exec();
|
||||
if (importDialog->isImportAgreed()) {
|
||||
const QSize previousSize = smpic->getPictureResolution();
|
||||
const QByteArray previousPicture = smpic->getPictureStream();
|
||||
bool success = smpic->setImage(importDialog->image(), importDialog->isUnlimitedBuffer());
|
||||
if (success) {
|
||||
|
@ -793,8 +794,7 @@ void PictureDialog::editSnapmaticImage()
|
|||
QFile::copy(currentFilePath, backupFileName);
|
||||
}
|
||||
if (!smpic->exportPicture(currentFilePath)) {
|
||||
// TODO: Find a way to cache the image width and height
|
||||
smpic->setPictureStream(previousPicture, 0, 0);
|
||||
smpic->setPictureStream(previousPicture, previousSize.width(), previousSize.height());
|
||||
QMessageBox::warning(this, QApplication::translate("ImageEditorDialog", "Snapmatic Image Editor"), QApplication::translate("ImageEditorDialog", "Patching of Snapmatic Image failed because of I/O Error"));
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -50,20 +50,19 @@ void PictureExport::exportAsPicture(QWidget *parent, SnapmaticPicture *picture)
|
|||
// Quality Settings
|
||||
settings.beginGroup("Pictures");
|
||||
int defaultQuality = 100;
|
||||
QSize defExportSize = SnapmaticPicture::getSnapmaticResolution();
|
||||
int customQuality = settings.value("CustomQuality", defaultQuality).toInt();
|
||||
if (customQuality < 1 || customQuality > 100) {
|
||||
if (customQuality < 1 || customQuality > 100)
|
||||
customQuality = 100;
|
||||
}
|
||||
bool useCustomQuality = settings.value("CustomQualityEnabled", false).toBool();
|
||||
|
||||
// Size Settings
|
||||
const QSize defExportSize = QSize(960, 536);
|
||||
QSize cusExportSize = settings.value("CustomSize", defExportSize).toSize();
|
||||
if (cusExportSize.width() > 3840) {
|
||||
cusExportSize.setWidth(3840);
|
||||
if (cusExportSize.width() > 7680) {
|
||||
cusExportSize.setWidth(7680);
|
||||
}
|
||||
else if (cusExportSize.height() > 2160) {
|
||||
cusExportSize.setHeight(2160);
|
||||
else if (cusExportSize.height() > 4320) {
|
||||
cusExportSize.setHeight(4320);
|
||||
}
|
||||
if (cusExportSize.width() < 1) {
|
||||
cusExportSize.setWidth(1);
|
||||
|
|
|
@ -36,11 +36,6 @@
|
|||
#endif
|
||||
#include <QSaveFile>
|
||||
|
||||
// IMAGES VALUES
|
||||
#define snapmaticResolutionW 960
|
||||
#define snapmaticResolutionH 536
|
||||
#define snapmaticResolution QSize(snapmaticResolutionW, snapmaticResolutionH)
|
||||
|
||||
// GTA5VIEW RELATED INTERNAL FUNCTIONS
|
||||
inline quint32 gta5view_charToUInt32LE(char *x)
|
||||
{
|
||||
|
@ -601,11 +596,14 @@ bool SnapmaticPicture::readingPicture(bool cacheEnabled_)
|
|||
if (!ok)
|
||||
return false;
|
||||
|
||||
if (cacheEnabled)
|
||||
if (cacheEnabled) {
|
||||
picOk = cachePicture.loadFromData(QByteArray::fromRawData(p_ragePhoto.jpegData(), p_ragePhoto.jpegSize()), "JPEG");
|
||||
picRes = cachePicture.size();
|
||||
}
|
||||
else {
|
||||
QImage tempPicture;
|
||||
picOk = tempPicture.loadFromData(QByteArray::fromRawData(p_ragePhoto.jpegData(), p_ragePhoto.jpegSize()), "JPEG");
|
||||
picRes = tempPicture.size();
|
||||
}
|
||||
|
||||
parseJsonContent(); // JSON parsing is own function
|
||||
|
@ -712,13 +710,17 @@ bool SnapmaticPicture::setPictureStream(const QByteArray &streamArray, int width
|
|||
}
|
||||
else if (gta5view_isRDR2Format(photoFormat)) {
|
||||
snapmaticJson.jsonObject["sign"] = p_ragePhoto.jpegSign(RagePhoto::PhotoFormat::RDR2);
|
||||
snapmaticJson.jsonObject["size"] = jpegPicStreamLength;
|
||||
snapmaticJson.jsonObject["size"] = streamArray.size();
|
||||
snapmaticJson.jsonObject["width"] = width;
|
||||
snapmaticJson.jsonObject["height"] = height;
|
||||
const std::string json = SnapmaticJson::serialize(snapmaticJson.jsonObject);
|
||||
p_ragePhoto.setJson(json.c_str());
|
||||
}
|
||||
|
||||
// Update resolution
|
||||
picRes = QSize(width, height);
|
||||
|
||||
// Update cache
|
||||
if (cacheEnabled) {
|
||||
QImage replacedPicture;
|
||||
replacedPicture.loadFromData(streamArray);
|
||||
|
@ -1216,11 +1218,9 @@ bool SnapmaticPicture::setPictureVisible()
|
|||
return true;
|
||||
}
|
||||
|
||||
// PREDEFINED PROPERTIES
|
||||
|
||||
QSize SnapmaticPicture::getSnapmaticResolution()
|
||||
const QSize SnapmaticPicture::getPictureResolution()
|
||||
{
|
||||
return snapmaticResolution;
|
||||
return picRes;
|
||||
}
|
||||
|
||||
// SNAPMATIC FORMAT
|
||||
|
|
|
@ -80,6 +80,7 @@ public:
|
|||
void clearCache();
|
||||
const QImage getImage();
|
||||
const QByteArray getPictureStream();
|
||||
const QSize getPictureResolution();
|
||||
const QString getLastStep(bool readable = true);
|
||||
const QString getPictureStr();
|
||||
const QString getPictureTitl();
|
||||
|
@ -134,9 +135,6 @@ public:
|
|||
inline bool setHidden() { return setPictureHidden(); }
|
||||
inline bool setVisible() { return setPictureVisible(); }
|
||||
|
||||
// PREDEFINED PROPERTIES
|
||||
static QSize getSnapmaticResolution();
|
||||
|
||||
// SNAPMATIC FORMAT
|
||||
SnapmaticFormat getSnapmaticFormat();
|
||||
void setSnapmaticFormat(SnapmaticFormat format);
|
||||
|
@ -161,6 +159,7 @@ private:
|
|||
QString pictureStr;
|
||||
QString lastStep;
|
||||
QString sortStr;
|
||||
QSize picRes;
|
||||
bool picOk;
|
||||
bool cacheEnabled;
|
||||
bool isFormatSwitch;
|
||||
|
|
|
@ -356,6 +356,7 @@ void SnapmaticWidget::editSnapmaticImage()
|
|||
importDialog->setModal(true);
|
||||
importDialog->exec();
|
||||
if (importDialog->isImportAgreed()) {
|
||||
const QSize previousSize = smpic->getPictureResolution();
|
||||
const QByteArray previousPicture = smpic->getPictureStream();
|
||||
bool success = smpic->setImage(importDialog->image(), importDialog->isUnlimitedBuffer());
|
||||
if (success) {
|
||||
|
@ -366,8 +367,7 @@ void SnapmaticWidget::editSnapmaticImage()
|
|||
QFile::copy(currentFilePath, backupFileName);
|
||||
}
|
||||
if (!smpic->exportPicture(currentFilePath)) {
|
||||
// TODO: Find a way to cache the image width and height
|
||||
smpic->setPictureStream(previousPicture, 0, 0);
|
||||
smpic->setPictureStream(previousPicture, previousSize.width(), previousSize.height());
|
||||
QMessageBox::warning(this, QApplication::translate("ImageEditorDialog", "Snapmatic Image Editor"), QApplication::translate("ImageEditorDialog", "Patching of Snapmatic Image failed because of I/O Error"));
|
||||
return;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue