bool Jpeg2000Importer::populateDataDescriptor(RasterDataDescriptor* pDescriptor) { if (pDescriptor == NULL) { return false; } RasterFileDescriptor* pFileDescriptor = dynamic_cast<RasterFileDescriptor*>(pDescriptor->getFileDescriptor()); VERIFY(pFileDescriptor != NULL); const string& fileName = pFileDescriptor->getFilename(); if (fileName.empty() == true) { return false; } opj_image_t* pImage = getImageInfo(fileName, true); if (pImage == NULL) { return false; } // Bits per element unsigned int bitsPerElement = pImage->comps->prec; pFileDescriptor->setBitsPerElement(bitsPerElement); // Data type EncodingType dataType = INT1UBYTE; if (bitsPerElement <= 8) { if (pImage->comps->sgnd) { dataType = INT1SBYTE; } else { dataType = INT1UBYTE; } } else if (bitsPerElement <= 16) { if (pImage->comps->sgnd) { dataType = INT2SBYTES; } else { dataType = INT2UBYTES; } } else if (bitsPerElement <= 32) { if (pImage->comps->sgnd) { dataType = INT4SBYTES; } else { dataType = INT4UBYTES; } } else if (bitsPerElement <= 64) { dataType = FLT8BYTES; } // Override with information from the filename, if present. unsigned int bandFactor = 0; QStringList parts = QString::fromStdString(fileName).split('.'); foreach (QString part, parts) { bool error; EncodingType dataTypeTemp = StringUtilities::fromXmlString<EncodingType>(part.toStdString(), &error); if (dataTypeTemp.isValid() == true && error == false) { bandFactor = Jpeg2000Utilities::get_num_bands(dataTypeTemp); if (bandFactor != 0) { dataType = dataTypeTemp; break; } } }
ExportOptionsDlg::ExportOptionsDlg(ExporterResource& pExporter, QWidget* pParent) : QDialog(pParent), mpExporter(pExporter), mpTabWidget(NULL), mpSubsetPage(NULL), mpExporterPage(NULL) { // Options widget QStackedWidget* pStack = new QStackedWidget(this); // Subset page RasterElement* pRasterElement = dynamic_cast<RasterElement*>(mpExporter->getItem()); RasterFileDescriptor* pRasterWholeCubeFileDescriptor = NULL; RasterDataDescriptor* pRasterOrgDataDescriptor = NULL; if (pRasterElement != NULL) { pRasterOrgDataDescriptor = dynamic_cast<RasterDataDescriptor*>(pRasterElement->getDataDescriptor()); if (pRasterOrgDataDescriptor != NULL) { // we are creating a file descriptor for export from the original cube, because the SubsetWidget // uses DimensionDescriptor::operator= compare's to determine selection which dictate that on-disk, // original and active numbers need to be identical, this guarantees that DimensionDescriptors will // compare correctly. pRasterWholeCubeFileDescriptor = dynamic_cast<RasterFileDescriptor*>( RasterUtilities::generateFileDescriptorForExport(pRasterOrgDataDescriptor, "foobar")); } } RasterFileDescriptor* pRasterFileDescriptor = dynamic_cast<RasterFileDescriptor*>(mpExporter->getFileDescriptor()); if ((pRasterFileDescriptor != NULL) && (pRasterWholeCubeFileDescriptor != NULL) && (pRasterOrgDataDescriptor != NULL)) { mpSubsetPage = new SubsetWidget(); mpSubsetPage->setExportMode(true); // Rows const vector<DimensionDescriptor>& orgRows = pRasterWholeCubeFileDescriptor->getRows(); const vector<DimensionDescriptor>& selectedRows = pRasterFileDescriptor->getRows(); mpSubsetPage->setRows(orgRows, selectedRows); // Columns const vector<DimensionDescriptor>& orgColumns = pRasterWholeCubeFileDescriptor->getColumns(); const vector<DimensionDescriptor>& selectedColumns = pRasterFileDescriptor->getColumns(); mpSubsetPage->setColumns(orgColumns, selectedColumns); // Bands const vector<DimensionDescriptor>& orgBands = pRasterWholeCubeFileDescriptor->getBands(); const vector<DimensionDescriptor>& selectedBands = pRasterFileDescriptor->getBands(); vector<string> bandNames = RasterUtilities::getBandNames(pRasterOrgDataDescriptor); mpSubsetPage->setBands(orgBands, bandNames, selectedBands); // Initial bad band file directory QString strDirectory; string filename = pRasterFileDescriptor->getFilename(); if (filename.empty() == false) { QFileInfo fileInfo(QString::fromStdString(filename)); strDirectory = fileInfo.absolutePath(); } mpSubsetPage->setBadBandFileDirectory(strDirectory); } // Exporter page if (mpExporter->getPlugIn() != NULL) { mpExporterPage = mpExporter->getExportOptionsWidget(); } // Horizontal line QFrame* pLine = new QFrame(this); pLine->setFrameStyle(QFrame::HLine | QFrame::Sunken); // Buttons QDialogButtonBox* pButtonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, this); // Layout QVBoxLayout* pLayout = new QVBoxLayout(this); pLayout->setMargin(10); pLayout->setSpacing(10); pLayout->addWidget(pStack, 10); pLayout->addWidget(pLine); pLayout->addWidget(pButtonBox); // Initialization QString strWindowTitle = "Export Options"; SessionItem* pSessionItem = mpExporter->getItem(); if (pSessionItem != NULL) { string name = pSessionItem->getDisplayName(); if (name.empty() == true) { name = pSessionItem->getName(); } if (name.empty() == false) { strWindowTitle += ": " + QString::fromStdString(name); } } setWindowTitle(strWindowTitle); setModal(true); if ((mpSubsetPage != NULL) || (mpExporterPage != NULL)) { QWidget* pSubsetWidget = NULL; if (mpSubsetPage != NULL) { pSubsetWidget = new QWidget(); mpSubsetPage->setParent(pSubsetWidget); QVBoxLayout* pSubsetLayout = new QVBoxLayout(pSubsetWidget); if (mpExporterPage != NULL) { pSubsetLayout->setMargin(10); } else { pSubsetLayout->setMargin(0); } pSubsetLayout->setSpacing(10); pSubsetLayout->addWidget(mpSubsetPage); } QWidget* pExporterWidget = NULL; if (mpExporterPage != NULL) { pExporterWidget = new QWidget(); mpExporterPage->setParent(pExporterWidget); QVBoxLayout* pExporterLayout = new QVBoxLayout(pExporterWidget); if (mpSubsetPage != NULL) { pExporterLayout->setMargin(10); } else { pExporterLayout->setMargin(0); } pExporterLayout->setSpacing(10); pExporterLayout->addWidget(mpExporterPage); } if ((pSubsetWidget != NULL) && (pExporterWidget != NULL)) { QString strExporterCaption = mpExporterPage->windowTitle(); if (strExporterCaption.isEmpty() == true) { PlugIn* pPlugIn = mpExporter->getPlugIn(); if (pPlugIn != NULL) { strExporterCaption = QString::fromStdString(pPlugIn->getName()); } if (strExporterCaption.isEmpty() == true) { strExporterCaption = "Exporter"; } } mpTabWidget = new QTabWidget(this); mpTabWidget->setTabPosition(QTabWidget::North); mpTabWidget->addTab(pSubsetWidget, "Subset"); mpTabWidget->addTab(pExporterWidget, strExporterCaption); pStack->addWidget(mpTabWidget); } else if (pSubsetWidget != NULL) { pStack->addWidget(pSubsetWidget); pButtonBox->setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); } else if (pExporterWidget != NULL) { pStack->addWidget(pExporterWidget); } } if (pStack->count() == 0) { QLabel* pNoOptionsLabel = new QLabel("No options are available", this); pNoOptionsLabel->setAlignment(Qt::AlignCenter); pNoOptionsLabel->setMinimumSize(250, 100); pStack->addWidget(pNoOptionsLabel); } // Connections VERIFYNR(connect(pButtonBox, SIGNAL(accepted()), this, SLOT(accept()))); VERIFYNR(connect(pButtonBox, SIGNAL(rejected()), this, SLOT(reject()))); }
bool IceExporterShell::execute(PlugInArgList* pInArgList, PlugInArgList* pOutArgList) { string filename; try { // Set up subclasses parseInputArgs(pInArgList); // Get the RasterElement and RasterFileDescriptor RasterElement* pOutputCube = NULL; RasterFileDescriptor* pOutputFileDescriptor = NULL; getOutputCubeAndFileDescriptor(pOutputCube, pOutputFileDescriptor); ICEVERIFY_MSG(pOutputCube != NULL, "No Raster Element specified."); ICEVERIFY_MSG(pOutputFileDescriptor != NULL, "No Raster File Descriptor specified."); RasterDataDescriptor* pRasterDescriptor = dynamic_cast<RasterDataDescriptor*>(pOutputCube->getDataDescriptor()); ICEVERIFY_MSG(pRasterDescriptor != NULL, "Raster Element is invalid."); // Open the file for writing filename = pOutputFileDescriptor->getFilename().getFullPathAndName(); Hdf5FileResource fileResource(H5Fcreate(filename.c_str(), H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)); ICEVERIFY_MSG(*fileResource >= 0, "Unable to create file " + filename) IceWriter writer(*fileResource, mFileType); mpWriter = &writer; if (mpOptionsWidget.get() != NULL) { writer.setChunkSize(mpOptionsWidget->getChunkSize() * 1024 * 1024); writer.setCompressionType(mpOptionsWidget->getCompressionType()); writer.setGzipCompressionLevel(mpOptionsWidget->getGzipCompressionLevel()); } if ((pRasterDescriptor->getDataType() == INT4SCOMPLEX || pRasterDescriptor->getDataType() == FLT8COMPLEX) && (writer.getCompressionType() == GZIP || writer.getCompressionType() == SHUFFLE_AND_GZIP)) { std::string msgtxt = "Compression not supported with complex data types, data will not be compressed."; MessageResource msg(msgtxt, "app", "{7B050EE4-D025-43b2-AD8F-DF8E28FA8551}"); if (mpProgress != NULL) { mpProgress->updateProgress(msgtxt, 1, WARNING); } } writer.writeFileHeader(); abortIfNecessary(); // Write the cube to the file writer.writeCube(outputCubePath(), pOutputCube, pOutputFileDescriptor, mpProgress); abortIfNecessary(); // Allow subclasses to write class-specific information to the file finishWriting(writer); abortIfNecessary(); // Finished mpWriter = NULL; if (mpProgress != NULL) { mpProgress->updateProgress("Ice export complete.", 100, NORMAL); } } catch (const IceException& ex) { if (mpProgress != NULL) { string msg = ex.getFailureMessage(); if (msg.empty()) { msg = "Unknown error. Failed to create file."; } mpProgress->updateProgress(msg, 0, ERRORS); } ex.addToMessageLog(); if (filename.empty() == false) { remove(filename.c_str()); } mpWriter = NULL; return false; } catch (const IceAbortException&) { if (mpProgress != NULL) { mpProgress->updateProgress("Ice export aborted.", 0, ABORT); } if (filename.empty() == false) { remove(filename.c_str()); } mpWriter = NULL; return false; } return true; }