From dff22b01b6757cae80d233b4ba1fd66a20f386f1 Mon Sep 17 00:00:00 2001 From: Andrzej Kapolka Date: Fri, 5 Dec 2014 01:58:45 -0800 Subject: [PATCH] Allow loading "MDR" files saved by Wilbur, fix for reallocating error. --- libraries/metavoxels/src/Spanner.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/libraries/metavoxels/src/Spanner.cpp b/libraries/metavoxels/src/Spanner.cpp index 216d4d7d1d..956dc45729 100644 --- a/libraries/metavoxels/src/Spanner.cpp +++ b/libraries/metavoxels/src/Spanner.cpp @@ -608,22 +608,27 @@ static int getHeightfieldSize(int size) { void HeightfieldHeightEditor::select() { QSettings settings; QString result = QFileDialog::getOpenFileName(this, "Select Height Image", settings.value("heightDir").toString(), - "Images (*.png *.jpg *.bmp *.raw)"); + "Images (*.png *.jpg *.bmp *.raw *.mdr)"); if (result.isNull()) { return; } settings.setValue("heightDir", QFileInfo(result).path()); const quint16 CONVERSION_OFFSET = 1; - if (result.toLower().endsWith(".raw")) { + QString lowerResult = result.toLower(); + bool isMDR = lowerResult.endsWith(".mdr"); + if (lowerResult.endsWith(".raw") || isMDR) { QFile input(result); input.open(QIODevice::ReadOnly); QDataStream in(&input); in.setByteOrder(QDataStream::LittleEndian); - QVector rawContents; - while (!in.atEnd()) { - quint16 height; - in >> height; - rawContents.append(height); + if (isMDR) { + const int MDR_HEADER_SIZE = 1024; + input.seek(MDR_HEADER_SIZE); + } + int available = input.bytesAvailable() / sizeof(quint16); + QVector rawContents(available); + for (quint16* height = rawContents.data(), *end = height + available; height != end; height++) { + in >> *height; } if (rawContents.isEmpty()) { QMessageBox::warning(this, "Invalid Image", "The selected image could not be read.");