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 21eff41238
commit 3515db4a3b
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&) {