mirror of
https://gitlab.com/Syping/gta5view-cmd
synced 2024-11-21 21:20:22 +01:00
gta5view 1.9.x, eXtend added
This commit is contained in:
parent
bfe4dcf306
commit
add13d80bd
5 changed files with 189 additions and 228 deletions
6
.gitmodules
vendored
6
.gitmodules
vendored
|
@ -1,4 +1,4 @@
|
||||||
[submodule "gta5view"]
|
[submodule "gta5view"]
|
||||||
path = gta5view
|
path = gta5view
|
||||||
url = https://gitlab.com/Syping/gta5view.git/
|
url = https://gitlab.com/Syping/gta5view.git/
|
||||||
branch = 1.8.x
|
branch = 1.9.x
|
||||||
|
|
2
gta5view
2
gta5view
|
@ -1 +1 @@
|
||||||
Subproject commit f8049c817804c71c046ee5613d15dda555f5e441
|
Subproject commit 1b6cb511be6fbf86b89a0a3d7121d99796966e17
|
|
@ -25,9 +25,11 @@ TEMPLATE = app
|
||||||
CONFIG += console
|
CONFIG += console
|
||||||
|
|
||||||
SOURCES += main.cpp \
|
SOURCES += main.cpp \
|
||||||
|
gta5view/RagePhoto.cpp \
|
||||||
gta5view/SnapmaticPicture.cpp
|
gta5view/SnapmaticPicture.cpp
|
||||||
|
|
||||||
HEADERS += \
|
HEADERS += \
|
||||||
|
gta5view/RagePhoto.h \
|
||||||
gta5view/SnapmaticPicture.h
|
gta5view/SnapmaticPicture.h
|
||||||
|
|
||||||
INCLUDEPATH += ./gta5view
|
INCLUDEPATH += ./gta5view
|
||||||
|
|
397
main.cpp
397
main.cpp
|
@ -1,6 +1,6 @@
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
* gta5view-cmd - gta5view Command Line
|
* gta5view-cmd - gta5view Command Line
|
||||||
* Copyright (C) 2017-2018 Syping
|
* Copyright (C) 2017-2020 Syping
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -32,11 +32,11 @@ int main(int argc, char *argv[])
|
||||||
QCoreApplication a(argc, argv);
|
QCoreApplication a(argc, argv);
|
||||||
QStringList args = a.arguments();
|
QStringList args = a.arguments();
|
||||||
|
|
||||||
if (args.length() >= 3)
|
if (args.length() >= 3) {
|
||||||
{
|
|
||||||
QString format = "jpg";
|
QString format = "jpg";
|
||||||
bool isDefault = true;
|
bool isDefault = true;
|
||||||
bool avatarMode = false;
|
bool avatarMode = false;
|
||||||
|
bool eXtendMode = false;
|
||||||
bool ignoreORes = false;
|
bool ignoreORes = false;
|
||||||
bool convertToGTA = false;
|
bool convertToGTA = false;
|
||||||
bool customFormat = false;
|
bool customFormat = false;
|
||||||
|
@ -44,238 +44,241 @@ int main(int argc, char *argv[])
|
||||||
bool keepAspectRatio = true;
|
bool keepAspectRatio = true;
|
||||||
QMap<QString,QString> flags;
|
QMap<QString,QString> flags;
|
||||||
|
|
||||||
if (args.length() >= 4)
|
if (args.length() >= 4) {
|
||||||
{
|
if (args.at(3) == "-pgta") {
|
||||||
if (args.at(3) == "-pgta")
|
|
||||||
{
|
|
||||||
convertToGTA = true;
|
convertToGTA = true;
|
||||||
customFormat = false;
|
customFormat = false;
|
||||||
}
|
}
|
||||||
else if (args.at(3) == "-g5e")
|
else if (args.at(3) == "-g5e") {
|
||||||
{
|
|
||||||
convertToGTA = true;
|
convertToGTA = true;
|
||||||
customFormat = true;
|
customFormat = true;
|
||||||
}
|
}
|
||||||
else if (args.at(3) == "-jpg")
|
else if (args.at(3) == "-jpg") {
|
||||||
{
|
|
||||||
format = "jpg";
|
format = "jpg";
|
||||||
convertToGTA = false;
|
convertToGTA = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (args.length() >= 5)
|
if (args.length() >= 5) {
|
||||||
{
|
if (args.at(4) == "-a") {
|
||||||
if (args.at(4) == "-a")
|
|
||||||
{
|
|
||||||
isDefault = false;
|
isDefault = false;
|
||||||
avatarMode = true;
|
avatarMode = true;
|
||||||
}
|
}
|
||||||
else if (args.at(4) == "-p")
|
else if (args.at(4) == "-aX") {
|
||||||
{
|
isDefault = false;
|
||||||
|
avatarMode = true;
|
||||||
|
eXtendMode = true;
|
||||||
|
}
|
||||||
|
else if (args.at(4) == "-p") {
|
||||||
isDefault = false;
|
isDefault = false;
|
||||||
avatarMode = false;
|
avatarMode = false;
|
||||||
}
|
}
|
||||||
else if (args.at(4) == "-d")
|
else if (args.at(4) == "-pX") {
|
||||||
{
|
isDefault = false;
|
||||||
|
avatarMode = false;
|
||||||
|
eXtendMode = true;
|
||||||
|
}
|
||||||
|
else if (args.at(4) == "-d") {
|
||||||
isDefault = true;
|
isDefault = true;
|
||||||
}
|
}
|
||||||
else if (args.at(4) == "-fs")
|
else if (args.at(4) == "-dX") {
|
||||||
{
|
isDefault = true;
|
||||||
|
eXtendMode = true;
|
||||||
|
}
|
||||||
|
else if (args.at(4) == "-fs") {
|
||||||
convertToGTA = false;
|
convertToGTA = false;
|
||||||
formatSwitch = true;
|
formatSwitch = true;
|
||||||
}
|
}
|
||||||
else if (args.at(4) == "-aiar")
|
else if (args.at(4) == "-aiar") {
|
||||||
{
|
|
||||||
isDefault = false;
|
isDefault = false;
|
||||||
avatarMode = true;
|
avatarMode = true;
|
||||||
keepAspectRatio = false;
|
keepAspectRatio = false;
|
||||||
}
|
}
|
||||||
else if (args.at(4) == "-akar")
|
else if (args.at(4) == "-aiarX") {
|
||||||
{
|
isDefault = false;
|
||||||
|
avatarMode = true;
|
||||||
|
eXtendMode = true;
|
||||||
|
keepAspectRatio = false;
|
||||||
|
}
|
||||||
|
else if (args.at(4) == "-akar") {
|
||||||
isDefault = false;
|
isDefault = false;
|
||||||
avatarMode = true;
|
avatarMode = true;
|
||||||
keepAspectRatio = true;
|
keepAspectRatio = true;
|
||||||
}
|
}
|
||||||
else if (args.at(4) == "-piar")
|
else if (args.at(4) == "-akarX") {
|
||||||
{
|
isDefault = false;
|
||||||
|
avatarMode = true;
|
||||||
|
eXtendMode = true;
|
||||||
|
keepAspectRatio = true;
|
||||||
|
}
|
||||||
|
else if (args.at(4) == "-piar") {
|
||||||
isDefault = false;
|
isDefault = false;
|
||||||
avatarMode = false;
|
avatarMode = false;
|
||||||
keepAspectRatio = false;
|
keepAspectRatio = false;
|
||||||
}
|
}
|
||||||
else if (args.at(4) == "-pkar")
|
else if (args.at(4) == "-piarX") {
|
||||||
{
|
isDefault = false;
|
||||||
|
avatarMode = false;
|
||||||
|
eXtendMode = true;
|
||||||
|
keepAspectRatio = false;
|
||||||
|
}
|
||||||
|
else if (args.at(4) == "-pkar") {
|
||||||
isDefault = false;
|
isDefault = false;
|
||||||
avatarMode = false;
|
avatarMode = false;
|
||||||
keepAspectRatio = true;
|
keepAspectRatio = true;
|
||||||
}
|
}
|
||||||
else if (args.at(4) == "-diar")
|
else if (args.at(4) == "-pkarX") {
|
||||||
{
|
isDefault = false;
|
||||||
|
avatarMode = false;
|
||||||
|
eXtendMode = true;
|
||||||
|
keepAspectRatio = true;
|
||||||
|
}
|
||||||
|
else if (args.at(4) == "-diar") {
|
||||||
isDefault = true;
|
isDefault = true;
|
||||||
keepAspectRatio = false;
|
keepAspectRatio = false;
|
||||||
}
|
}
|
||||||
else if (args.at(4) == "-dkar")
|
else if (args.at(4) == "-diarX") {
|
||||||
{
|
isDefault = true;
|
||||||
|
eXtendMode = true;
|
||||||
|
keepAspectRatio = false;
|
||||||
|
}
|
||||||
|
else if (args.at(4) == "-dkar") {
|
||||||
isDefault = true;
|
isDefault = true;
|
||||||
keepAspectRatio = true;
|
keepAspectRatio = true;
|
||||||
}
|
}
|
||||||
else if (args.at(4) == "-ior")
|
else if (args.at(4) == "-dkarX") {
|
||||||
{
|
isDefault = true;
|
||||||
|
eXtendMode = true;
|
||||||
|
keepAspectRatio = true;
|
||||||
|
}
|
||||||
|
else if (args.at(4) == "-ior") {
|
||||||
isDefault = false;
|
isDefault = false;
|
||||||
ignoreORes = true;
|
ignoreORes = true;
|
||||||
keepAspectRatio = false;
|
keepAspectRatio = false;
|
||||||
}
|
}
|
||||||
else
|
else if (args.at(4) == "-iorX") {
|
||||||
{
|
isDefault = false;
|
||||||
|
ignoreORes = true;
|
||||||
|
eXtendMode = true;
|
||||||
|
keepAspectRatio = false;
|
||||||
|
}
|
||||||
|
else {
|
||||||
QStringList currentFlagArg = args.at(4).split("=");
|
QStringList currentFlagArg = args.at(4).split("=");
|
||||||
QString currentFlag = currentFlagArg.at(0).toLower();
|
QString currentFlag = currentFlagArg.at(0).toLower();
|
||||||
if (currentFlag.left(1) == "-")
|
if (currentFlag.at(0) == '-') {
|
||||||
{
|
|
||||||
currentFlag.remove(0, 1);
|
currentFlag.remove(0, 1);
|
||||||
currentFlagArg.removeAt(0);
|
currentFlagArg.removeFirst();
|
||||||
QString currentValue = currentFlagArg.join(QString());
|
const QString currentValue = currentFlagArg.join(QString());
|
||||||
flags[currentFlag] = currentValue;
|
flags[currentFlag] = currentValue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (args.length() >= 6)
|
if (args.length() >= 6) {
|
||||||
{
|
|
||||||
QStringList flagArgs(args);
|
QStringList flagArgs(args);
|
||||||
for (int argId = 0; argId == 5; argId++)
|
for (int argId = 0; argId == 5; argId++) {
|
||||||
{
|
|
||||||
flagArgs.removeAt(argId);
|
flagArgs.removeAt(argId);
|
||||||
}
|
}
|
||||||
for (QString flagArg : flagArgs)
|
for (const QString &flagArg : flagArgs) {
|
||||||
{
|
|
||||||
QStringList currentFlagArg = flagArg.split("=");
|
QStringList currentFlagArg = flagArg.split("=");
|
||||||
QString currentFlag = currentFlagArg.at(0).toLower();
|
QString currentFlag = currentFlagArg.at(0).toLower();
|
||||||
if (currentFlag.left(1) == "-")
|
if (currentFlag.at(0) == '-') {
|
||||||
{
|
|
||||||
currentFlag.remove(0, 1);
|
currentFlag.remove(0, 1);
|
||||||
currentFlagArg.removeAt(0);
|
currentFlagArg.removeFirst();
|
||||||
QString currentValue = currentFlagArg.join(QString());
|
const QString currentValue = currentFlagArg.join(QString());
|
||||||
flags[currentFlag] = currentValue;
|
flags[currentFlag] = currentValue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!convertToGTA)
|
if (!convertToGTA) {
|
||||||
{
|
|
||||||
SnapmaticPicture picture(args.at(1));
|
SnapmaticPicture picture(args.at(1));
|
||||||
if (picture.readingPicture(true, false, true))
|
if (picture.readingPicture(false)) {
|
||||||
{
|
|
||||||
QString filePath = args.at(2);
|
QString filePath = args.at(2);
|
||||||
if (!formatSwitch)
|
if (!formatSwitch) {
|
||||||
{
|
|
||||||
filePath.replace("<autodef>", picture.getExportPictureFileName());
|
filePath.replace("<autodef>", picture.getExportPictureFileName());
|
||||||
filePath.replace("<autoext>", ".jpg");
|
filePath.replace("<autoext>", ".jpg");
|
||||||
if (!picture.exportPicture(filePath, SnapmaticFormat::JPEG_Format))
|
if (!picture.exportPicture(filePath, SnapmaticFormat::JPEG_Format)) {
|
||||||
{
|
cout << "gta5view-cmd: Exporting of " << args.at(1).toStdString() << " to " << filePath.toStdString() << " is failed!" << endl;
|
||||||
cout << "gta5view-cmd: Exporting of " << args.at(1).toStdString().c_str() << " to " << filePath.toStdString().c_str() << " is failed!" << endl;
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
if (flags.value("output", QString()).toLower() == "exported_filename") {
|
||||||
if (flags.value("output", QString()).toLower() == "exported_filename")
|
cout << filePath.toStdString() << endl;
|
||||||
{
|
|
||||||
cout << filePath.toStdString().c_str() << endl;
|
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
cout << "gta5view-cmd: Exporting of " << args.at(1).toStdString() << " to " << filePath.toStdString() << " is successful!" << endl;
|
||||||
cout << "gta5view-cmd: Exporting of " << args.at(1).toStdString().c_str() << " to " << filePath.toStdString().c_str() << " is successful!" << endl;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
filePath.replace("<autodef>", picture.getPictureFileName());
|
filePath.replace("<autodef>", picture.getPictureFileName());
|
||||||
if (customFormat)
|
if (customFormat) {
|
||||||
{
|
|
||||||
filePath.replace("<autoext>", ".g5e");
|
filePath.replace("<autoext>", ".g5e");
|
||||||
if (!picture.exportPicture(filePath, SnapmaticFormat::G5E_Format))
|
if (!picture.exportPicture(filePath, SnapmaticFormat::G5E_Format)) {
|
||||||
{
|
cout << "gta5view-cmd: Converting of " << args.at(1).toStdString() << " to " << filePath.toStdString() << " is failed!" << endl;
|
||||||
cout << "gta5view-cmd: Converting of " << args.at(1).toStdString().c_str() << " to " << filePath.toStdString().c_str() << " is failed!" << endl;
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
if (flags.value("output", QString()).toLower() == "exported_filename") {
|
||||||
if (flags.value("output", QString()).toLower() == "exported_filename")
|
cout << filePath.toStdString() << endl;
|
||||||
{
|
|
||||||
cout << filePath.toStdString().c_str() << endl;
|
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
cout << "gta5view-cmd: Converting of " << args.at(1).toStdString() << " to " << filePath.toStdString() << " is successful!" << endl;
|
||||||
cout << "gta5view-cmd: Converting of " << args.at(1).toStdString().c_str() << " to " << filePath.toStdString().c_str() << " is successful!" << endl;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
filePath.replace("<autoext>", "");
|
filePath.replace("<autoext>", "");
|
||||||
if (!picture.exportPicture(filePath, SnapmaticFormat::PGTA_Format))
|
if (!picture.exportPicture(filePath, SnapmaticFormat::PGTA_Format)) {
|
||||||
{
|
cout << "gta5view-cmd: Converting of " << args.at(1).toStdString() << " to " << filePath.toStdString() << " is failed!" << endl;
|
||||||
cout << "gta5view-cmd: Converting of " << args.at(1).toStdString().c_str() << " to " << filePath.toStdString().c_str() << " is failed!" << endl;
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
if (flags.value("output", QString()).toLower() == "exported_filename") {
|
||||||
if (flags.value("output", QString()).toLower() == "exported_filename")
|
cout << filePath.toStdString() << endl;
|
||||||
{
|
|
||||||
cout << filePath.toStdString().c_str() << endl;
|
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
cout << "gta5view-cmd: Converting of " << args.at(1).toStdString() << " to " << filePath.toStdString() << " is successful!" << endl;
|
||||||
cout << "gta5view-cmd: Converting of " << args.at(1).toStdString().c_str() << " to " << filePath.toStdString().c_str() << " is successful!" << endl;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
cout << "gta5view-cmd: Reading of " << args.at(1).toStdString() << " is failed!" << endl;
|
||||||
cout << "gta5view-cmd: Reading of " << args.at(1).toStdString().c_str() << " is failed!" << endl;
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
SnapmaticPicture picture(":/template.g5e");
|
SnapmaticPicture picture(":/template.g5e");
|
||||||
if (picture.readingPicture(true, false, true))
|
if (picture.readingPicture(false)) {
|
||||||
{
|
|
||||||
QImage image;
|
QImage image;
|
||||||
QFile imageFile(args.at(1));
|
QFile imageFile(args.at(1));
|
||||||
if (!imageFile.open(QFile::ReadOnly))
|
if (!imageFile.open(QFile::ReadOnly)) {
|
||||||
{
|
cout << "gta5view-cmd: Reading of " << args.at(1).toStdString() << " is failed!" << endl;
|
||||||
cout << "gta5view-cmd: Reading of " << args.at(1).toStdString().c_str() << " is failed!" << endl;
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
QImageReader imageReader;
|
QImageReader imageReader;
|
||||||
imageReader.setDecideFormatFromContent(true);
|
imageReader.setDecideFormatFromContent(true);
|
||||||
imageReader.setDevice(&imageFile);
|
imageReader.setDevice(&imageFile);
|
||||||
if (!imageReader.read(&image))
|
if (!imageReader.read(&image)) {
|
||||||
{
|
cout << "gta5view-cmd: Parsing of " << args.at(1).toStdString() << " is failed!" << endl;
|
||||||
cout << "gta5view-cmd: Parsing of " << args.at(1).toStdString().c_str() << " is failed!" << endl;
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if (!image.isNull())
|
if (!image.isNull()) {
|
||||||
{
|
if (!ignoreORes) {
|
||||||
if (!ignoreORes)
|
|
||||||
{
|
|
||||||
QSize snapmaticRes(960, 536);
|
QSize snapmaticRes(960, 536);
|
||||||
QSize avatarRes(470, 470);
|
QSize avatarRes(470, 470);
|
||||||
int avatarZoneX = 145;
|
int avatarZoneX = 145;
|
||||||
int avatarZoneY = 66;
|
int avatarZoneY = 66;
|
||||||
|
|
||||||
if (isDefault)
|
if (isDefault) {
|
||||||
{
|
if (image.width() == image.height()) {
|
||||||
if (image.width() == image.height())
|
|
||||||
{
|
|
||||||
avatarMode = true;
|
avatarMode = true;
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
avatarMode = false;
|
avatarMode = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!avatarMode)
|
if (!avatarMode) {
|
||||||
{
|
|
||||||
QImage snapmaticImage(snapmaticRes, QImage::Format_RGB888);
|
QImage snapmaticImage(snapmaticRes, QImage::Format_RGB888);
|
||||||
snapmaticImage.fill(Qt::black);
|
snapmaticImage.fill(Qt::black);
|
||||||
QPainter snapmaticPainter(&snapmaticImage);
|
QPainter snapmaticPainter(&snapmaticImage);
|
||||||
|
@ -283,59 +286,49 @@ int main(int argc, char *argv[])
|
||||||
// Picture mode
|
// Picture mode
|
||||||
int diffWidth = 0;
|
int diffWidth = 0;
|
||||||
int diffHeight = 0;
|
int diffHeight = 0;
|
||||||
if (keepAspectRatio)
|
if (keepAspectRatio) {
|
||||||
{
|
|
||||||
image = image.scaled(snapmaticRes, Qt::KeepAspectRatio, Qt::SmoothTransformation);
|
image = image.scaled(snapmaticRes, Qt::KeepAspectRatio, Qt::SmoothTransformation);
|
||||||
if (image.width() != snapmaticRes.width())
|
if (image.width() != snapmaticRes.width()) {
|
||||||
{
|
|
||||||
diffWidth = snapmaticRes.width() - image.width();
|
diffWidth = snapmaticRes.width() - image.width();
|
||||||
diffWidth = diffWidth / 2;
|
diffWidth = diffWidth / 2;
|
||||||
}
|
}
|
||||||
else if (image.height() != snapmaticRes.height())
|
else if (image.height() != snapmaticRes.height()) {
|
||||||
{
|
|
||||||
diffHeight = snapmaticRes.height() - image.height();
|
diffHeight = snapmaticRes.height() - image.height();
|
||||||
diffHeight = diffHeight / 2;
|
diffHeight = diffHeight / 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
image = image.scaled(snapmaticRes.width(), snapmaticRes.height(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
|
image = image.scaled(snapmaticRes.width(), snapmaticRes.height(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
|
||||||
}
|
}
|
||||||
snapmaticPainter.drawImage(0 + diffWidth, 0 + diffHeight, image);
|
snapmaticPainter.drawImage(0 + diffWidth, 0 + diffHeight, image);
|
||||||
snapmaticPainter.end();
|
snapmaticPainter.end();
|
||||||
image = snapmaticImage;
|
image = snapmaticImage;
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
QImage snapmaticImage(snapmaticRes, QImage::Format_RGB888);
|
QImage snapmaticImage(snapmaticRes, QImage::Format_RGB888);
|
||||||
snapmaticImage.fill(Qt::black);
|
snapmaticImage.fill(Qt::black);
|
||||||
QPainter snapmaticPainter(&snapmaticImage);
|
QPainter snapmaticPainter(&snapmaticImage);
|
||||||
|
|
||||||
// Scale to Avatar Resolution if needed
|
// Scale to Avatar Resolution if needed
|
||||||
if (image.width() != avatarRes.width())
|
if (image.width() != avatarRes.width()) {
|
||||||
{
|
|
||||||
image.scaled(avatarRes, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
|
image.scaled(avatarRes, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Avatar mode
|
// Avatar mode
|
||||||
int diffWidth = 0;
|
int diffWidth = 0;
|
||||||
int diffHeight = 0;
|
int diffHeight = 0;
|
||||||
if (keepAspectRatio)
|
if (keepAspectRatio) {
|
||||||
{
|
|
||||||
image = image.scaled(avatarRes, Qt::KeepAspectRatio, Qt::SmoothTransformation);
|
image = image.scaled(avatarRes, Qt::KeepAspectRatio, Qt::SmoothTransformation);
|
||||||
if (image.width() > image.height())
|
if (image.width() > image.height()) {
|
||||||
{
|
|
||||||
diffHeight = avatarRes.height() - image.height();
|
diffHeight = avatarRes.height() - image.height();
|
||||||
diffHeight = diffHeight / 2;
|
diffHeight = diffHeight / 2;
|
||||||
}
|
}
|
||||||
else if (image.width() < image.height())
|
else if (image.width() < image.height()) {
|
||||||
{
|
|
||||||
diffWidth = avatarRes.width() - image.width();
|
diffWidth = avatarRes.width() - image.width();
|
||||||
diffWidth = diffWidth / 2;
|
diffWidth = diffWidth / 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
image = image.scaled(avatarRes, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
|
image = image.scaled(avatarRes, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
|
||||||
}
|
}
|
||||||
snapmaticPainter.drawImage(avatarZoneX + diffWidth, avatarZoneY + diffHeight, image);
|
snapmaticPainter.drawImage(avatarZoneX + diffWidth, avatarZoneY + diffHeight, image);
|
||||||
|
@ -344,95 +337,75 @@ int main(int argc, char *argv[])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (picture.setImage(image))
|
if (picture.setImage(image, eXtendMode)) {
|
||||||
{
|
|
||||||
int crew = 0;
|
int crew = 0;
|
||||||
double posX = 0;
|
double posX = 0;
|
||||||
double posY = 0;
|
double posY = 0;
|
||||||
double posZ = 0;
|
double posZ = 0;
|
||||||
QStringList players;
|
QStringList players;
|
||||||
if (flags.contains("crew"))
|
if (flags.contains("crew")) {
|
||||||
{
|
|
||||||
bool crewValid;
|
bool crewValid;
|
||||||
int crewId = flags["crew"].toInt(&crewValid);
|
int crewId = flags["crew"].toInt(&crewValid);
|
||||||
if (crewValid)
|
if (crewValid) {
|
||||||
{
|
|
||||||
crew = crewId;
|
crew = crewId;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (flags.contains("title") && SnapmaticPicture::verifyTitle(flags["title"]))
|
if (flags.contains("title") && SnapmaticPicture::verifyTitle(flags["title"])) {
|
||||||
{
|
|
||||||
picture.setPictureTitle(flags["title"]);
|
picture.setPictureTitle(flags["title"]);
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
avatarMode ? picture.setPictureTitle("Converted Avatar") : picture.setPictureTitle("Converted Picture");
|
avatarMode ? picture.setPictureTitle("Converted Avatar") : picture.setPictureTitle("Converted Picture");
|
||||||
}
|
}
|
||||||
if (flags.contains("players"))
|
if (flags.contains("players")) {
|
||||||
{
|
|
||||||
bool flagValid = true;
|
bool flagValid = true;
|
||||||
QString playerFlag = flags["players"];
|
QString playerFlag = flags["players"];
|
||||||
if (playerFlag.left(1) == "[" && playerFlag.right(1) == "]")
|
if (playerFlag.left(1) == "[" && playerFlag.right(1) == "]") {
|
||||||
{
|
|
||||||
playerFlag.remove(0, 1);
|
playerFlag.remove(0, 1);
|
||||||
playerFlag.remove(playerFlag.length() - 1, 1);
|
playerFlag.remove(playerFlag.length() - 1, 1);
|
||||||
}
|
}
|
||||||
const QStringList playersList = playerFlag.split(",");
|
const QStringList playersList = playerFlag.split(",");
|
||||||
for (QString player : playersList)
|
for (QString player : playersList) {
|
||||||
{
|
if (player.left(1) == "\"" && player.right(1) == "\"") {
|
||||||
if (player.left(1) == "\"" && player.right(1) == "\"")
|
|
||||||
{
|
|
||||||
player.remove(0, 1);
|
player.remove(0, 1);
|
||||||
player.remove(player.length() - 1, 1);
|
player.remove(player.length() - 1, 1);
|
||||||
}
|
}
|
||||||
bool playerValid;
|
bool playerValid;
|
||||||
player.toInt(&playerValid);
|
player.toInt(&playerValid);
|
||||||
if (!playerValid)
|
if (!playerValid) {
|
||||||
{
|
|
||||||
flagValid = false;
|
flagValid = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (flagValid)
|
if (flagValid) {
|
||||||
{
|
|
||||||
players = playersList;
|
players = playersList;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (flags.contains("position"))
|
if (flags.contains("position")) {
|
||||||
{
|
|
||||||
bool flagValid = true;
|
bool flagValid = true;
|
||||||
QString positionFlag = flags["position"];
|
QString positionFlag = flags["position"];
|
||||||
if (positionFlag.left(1) == "[" && positionFlag.right(1) == "]")
|
if (positionFlag.left(1) == "[" && positionFlag.right(1) == "]") {
|
||||||
{
|
|
||||||
positionFlag.remove(0, 1);
|
positionFlag.remove(0, 1);
|
||||||
positionFlag.remove(positionFlag.length() - 1, 1);
|
positionFlag.remove(positionFlag.length() - 1, 1);
|
||||||
}
|
}
|
||||||
const QStringList positionsList = positionFlag.split(",");
|
const QStringList positionsList = positionFlag.split(",");
|
||||||
for (QString position : positionsList)
|
for (QString position : positionsList) {
|
||||||
{
|
if (position.left(1) == "\"" && position.right(1) == "\"") {
|
||||||
if (position.left(1) == "\"" && position.right(1) == "\"")
|
|
||||||
{
|
|
||||||
position.remove(0, 1);
|
position.remove(0, 1);
|
||||||
position.remove(position.length() - 1, 1);
|
position.remove(position.length() - 1, 1);
|
||||||
}
|
}
|
||||||
bool positionValid;
|
bool positionValid;
|
||||||
position.toDouble(&positionValid);
|
position.toDouble(&positionValid);
|
||||||
if (!positionValid)
|
if (!positionValid) {
|
||||||
{
|
|
||||||
flagValid = false;
|
flagValid = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (flagValid)
|
if (flagValid) {
|
||||||
{
|
if (positionsList.length() >= 1) {
|
||||||
if (positionsList.length() >= 1)
|
|
||||||
{
|
|
||||||
posX = positionsList.at(0).toDouble();
|
posX = positionsList.at(0).toDouble();
|
||||||
}
|
}
|
||||||
if (positionsList.length() >= 2)
|
if (positionsList.length() >= 2) {
|
||||||
{
|
|
||||||
posY = positionsList.at(1).toDouble();
|
posY = positionsList.at(1).toDouble();
|
||||||
}
|
}
|
||||||
if (positionsList.length() >= 3)
|
if (positionsList.length() >= 3) {
|
||||||
{
|
|
||||||
posZ = positionsList.at(2).toDouble();
|
posZ = positionsList.at(2).toDouble();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -451,76 +424,62 @@ int main(int argc, char *argv[])
|
||||||
picture.setPictureFileName(QString("PGTA5%1").arg(QString::number(pictureSP.uid)));
|
picture.setPictureFileName(QString("PGTA5%1").arg(QString::number(pictureSP.uid)));
|
||||||
QString filePath = args.at(2);
|
QString filePath = args.at(2);
|
||||||
filePath.replace("<autodef>", picture.getPictureFileName());
|
filePath.replace("<autodef>", picture.getPictureFileName());
|
||||||
if (!customFormat)
|
if (!customFormat) {
|
||||||
{
|
|
||||||
filePath.replace("<autoext>", "");
|
filePath.replace("<autoext>", "");
|
||||||
if (!picture.exportPicture(filePath, SnapmaticFormat::PGTA_Format))
|
if (!picture.exportPicture(filePath, SnapmaticFormat::PGTA_Format)) {
|
||||||
{
|
cout << "gta5view-cmd: Converting of " << args.at(1).toStdString() << " to " << filePath.toStdString() << " is failed!" << endl;
|
||||||
cout << "gta5view-cmd: Converting of " << args.at(1).toStdString().c_str() << " to " << filePath.toStdString().c_str() << " is failed!" << endl;
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
if (flags.value("output", QString()).toLower() == "exported_filename") {
|
||||||
if (flags.value("output", QString()).toLower() == "exported_filename")
|
cout << filePath.toStdString() << endl;
|
||||||
{
|
|
||||||
cout << filePath.toStdString().c_str() << endl;
|
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
cout << "gta5view-cmd: Converting of " << args.at(1).toStdString() << " to " << filePath.toStdString() << " is successful!" << endl;
|
||||||
cout << "gta5view-cmd: Converting of " << args.at(1).toStdString().c_str() << " to " << filePath.toStdString().c_str() << " is successful!" << endl;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
filePath.replace("<autoext>", ".g5e");
|
filePath.replace("<autoext>", ".g5e");
|
||||||
if (!picture.exportPicture(filePath, SnapmaticFormat::G5E_Format))
|
if (!picture.exportPicture(filePath, SnapmaticFormat::G5E_Format)) {
|
||||||
{
|
cout << "gta5view-cmd: Converting of " << args.at(1).toStdString() << " to " << filePath.toStdString() << " is failed!" << endl;
|
||||||
cout << "gta5view-cmd: Converting of " << args.at(1).toStdString().c_str() << " to " << filePath.toStdString().c_str() << " is failed!" << endl;
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
if (flags.value("output", QString()).toLower() == "exported_filename") {
|
||||||
if (flags.value("output", QString()).toLower() == "exported_filename")
|
cout << filePath.toStdString() << endl;
|
||||||
{
|
|
||||||
cout << filePath.toStdString().c_str() << endl;
|
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
cout << "gta5view-cmd: Converting of " << args.at(1).toStdString() << " to " << filePath.toStdString() << " is successful!" << endl;
|
||||||
cout << "gta5view-cmd: Converting of " << args.at(1).toStdString().c_str() << " to " << filePath.toStdString().c_str() << " is successful!" << endl;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
cout << "gta5view-cmd: Editing of Snapmatic Image Stream failed!" << endl;
|
cout << "gta5view-cmd: Editing of Snapmatic Image Stream failed!" << endl;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
cout << "gta5view-cmd: " << args.at(1).toStdString() << " is invalid image!" << endl;
|
||||||
cout << "gta5view-cmd: " << args.at(1).toStdString().c_str() << " is invalid image!" << endl;
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
cout << "gta5view-cmd: Reading of internal template failed!" << endl;
|
cout << "gta5view-cmd: Reading of internal template failed!" << endl;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
cout << "gta5view Command Line" << endl << endl;
|
cout << "gta5view Command Line" << endl << endl;
|
||||||
cout << "Usage: " << args.at(0).toStdString().c_str() << " source target -format -mode -flag=value" << endl;
|
cout << "Usage: " << args.at(0).toStdString() << " source target -format -mode -flag=value" << endl;
|
||||||
if (args.length() >= 2 && (args.at(1) == "--help" || args.at(1) == "-help"))
|
if (args.length() >= 2 && (args.at(1) == "--help" || args.at(1) == "-help")) {
|
||||||
{
|
|
||||||
cout << "Convert-only: <autodef> (auto file name at convert)" << endl;
|
cout << "Convert-only: <autodef> (auto file name at convert)" << endl;
|
||||||
cout << "Convert-only: <autoext> (auto file extension at convert)" << endl;
|
cout << "Convert-only: <autoext> (auto file extension at convert)" << endl;
|
||||||
cout << "Formats: jpg pgta g5e" << endl;
|
cout << "Formats: jpg pgta g5e" << endl;
|
||||||
cout << "Snapmatic Modes: a p d fs aiar akar piar pkar diar dkar ior" << endl;
|
cout << "Snapmatic Modes: a p d fs aiar akar piar pkar diar dkar ior" << endl;
|
||||||
|
cout << "Snapmatic Modes: aX pX dX aiarX akarX piarX pkarX diarX dkarX iorX" << endl;
|
||||||
cout << "Snapmatic Flags: crew=int players=int[] position=double[] title=string" << endl;
|
cout << "Snapmatic Flags: crew=int players=int[] position=double[] title=string" << endl;
|
||||||
cout << "Global Flags: output=string" << endl;
|
cout << "Global Flags: output=string" << endl;
|
||||||
}
|
}
|
||||||
|
|
10
res/app.rc
10
res/app.rc
|
@ -7,8 +7,8 @@ CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "gta5view-cmd.exe.manifest"
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
VS_VERSION_INFO VERSIONINFO
|
VS_VERSION_INFO VERSIONINFO
|
||||||
FILEVERSION 0, 4, 0, 0
|
FILEVERSION 0, 5, 0, 0
|
||||||
PRODUCTVERSION 0, 4, 0, 0
|
PRODUCTVERSION 0, 5, 0, 0
|
||||||
FILEFLAGSMASK 0x3fL
|
FILEFLAGSMASK 0x3fL
|
||||||
FILEFLAGS 0
|
FILEFLAGS 0
|
||||||
FILEOS VOS_NT_WINDOWS32
|
FILEOS VOS_NT_WINDOWS32
|
||||||
|
@ -25,12 +25,12 @@ BEGIN
|
||||||
BEGIN
|
BEGIN
|
||||||
VALUE "CompanyName", "Syping"
|
VALUE "CompanyName", "Syping"
|
||||||
VALUE "FileDescription", "gta5view-cmd"
|
VALUE "FileDescription", "gta5view-cmd"
|
||||||
VALUE "FileVersion", "0.4.0"
|
VALUE "FileVersion", "0.5.0"
|
||||||
VALUE "InternalName", "gta5view-cmd"
|
VALUE "InternalName", "gta5view-cmd"
|
||||||
VALUE "LegalCopyright", "Copyright © 2017-2018 Syping"
|
VALUE "LegalCopyright", "Copyright © 2017-2020 Syping"
|
||||||
VALUE "OriginalFilename", "gta5view-cmd.exe"
|
VALUE "OriginalFilename", "gta5view-cmd.exe"
|
||||||
VALUE "ProductName", "gta5view-cmd"
|
VALUE "ProductName", "gta5view-cmd"
|
||||||
VALUE "ProductVersion", "0.4.0"
|
VALUE "ProductVersion", "0.5.0"
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
|
Loading…
Reference in a new issue