Materials: Add support for embedded images

Adds support for file types other than PNG to embedded images in
materials. Adds checks to prevent crashing when an unsupported image
type is used.
This commit is contained in:
David Carter
2025-07-01 21:11:45 -04:00
committed by Chris Hennes
parent 556fc32c30
commit 902012f12f
3 changed files with 8 additions and 7 deletions

View File

@@ -126,7 +126,7 @@ void BaseDelegate::paintImage(QPainter* painter,
QImage img;
if (!propertyValue.isEmpty()) {
QByteArray by = QByteArray::fromBase64(propertyValue.toUtf8());
img = QImage::fromData(by, "PNG").scaled(64, 64, Qt::KeepAspectRatio);
img = QImage::fromData(by).scaled(64, 64, Qt::KeepAspectRatio);
}
QRect target(option.rect);
if (target.width() > target.height()) {

View File

@@ -134,7 +134,7 @@ ImageEdit::ImageEdit(const QString& propertyName,
QString value = _property->getString();
if (!value.isEmpty()) {
QByteArray by = QByteArray::fromBase64(value.toUtf8());
QImage img = QImage::fromData(by, "PNG");
QImage img = QImage::fromData(by);
_pixmap = QPixmap::fromImage(img);
}
showPixmap();

View File

@@ -940,12 +940,11 @@ bool MaterialsEditor::updateTexturePreview() const
try {
auto property = _material->getAppearanceProperty(QStringLiteral("TextureImage"));
if (!property->isNull()) {
// Base::Console().log("Has 'TextureImage'\n");
auto propertyValue = property->getString();
if (!propertyValue.isEmpty()) {
QByteArray by = QByteArray::fromBase64(propertyValue.toUtf8());
image = QImage::fromData(by, "PNG"); //.scaled(64, 64, Qt::KeepAspectRatio);
hasImage = true;
image = QImage::fromData(by);
hasImage = !image.isNull();
}
}
}
@@ -962,9 +961,11 @@ bool MaterialsEditor::updateTexturePreview() const
if (!image.load(filePath)) {
Base::Console().log("Unable to load image '%s'\n",
filePath.toStdString().c_str());
// return; // ???
hasImage = false;
}
else {
hasImage = !image.isNull();
}
hasImage = true;
}
}
catch (const Materials::PropertyNotFound&) {