/***************************************************** ** ** BasicWidget --- doExport ** ******************************************************/ void BasicWidget::doExport() { int exporttype; wxString filename, e; GetExportSize( &xsize, &ysize ); if ( config->showGraphicSizeDialog ) { ExportDialog dialog( this, xsize, ysize ); if ( dialog.ShowModal() != wxID_OK ) return; dialog.getSizes( xsize, ysize ); config->showGraphicSizeDialog = ! dialog.getCheckShowDialog(); } const static wxString filetypes = wxT( "PNG (*.png)|*.png|JPG (*.jpg)|*.jpg|Bitmap (*.bmp)|*.bmp|PCX (*pcx)|*pcx|PNM (*.pnm)|*.pnm|TIFF (*.tif)|*.tif|All files (*)| *.*" ); switch ( config->defGraphicExportType ) { case 1: filename = wxT( "out.jpg" ); break; case 2: filename = wxT( "out.bmp" ); break; case 3: filename = wxT( "out.pcx" ); break; case 4: filename = wxT( "out.pnm" ); break; case 5: filename = wxT( "out.tif" ); break; default: filename = wxT( "out.png" ); break; } int style = wxFD_SAVE; if ( config->exportAskOnOverwrite ) style |= wxFD_OVERWRITE_PROMPT; wxFileDialog exportFileDialog( this, _("Export Picture" ), config->defExportPath, filename, filetypes, style, wxDefaultPosition ); exportFileDialog.SetFilterIndex( config->defGraphicExportType ); if ( exportFileDialog.ShowModal() == wxID_OK ) { filename = exportFileDialog.GetDirectory() + wxFileName::GetPathSeparator() + exportFileDialog.GetFilename(); e = exportFileDialog.GetFilename().Right(3).MakeLower(); if ( e == wxT( "png" )) { exporttype = wxBITMAP_TYPE_PNG; config->defGraphicExportType = 0; } else if ( e == wxT( "jpg" )) { exporttype = wxBITMAP_TYPE_JPEG; config->defGraphicExportType = 0; } else if ( e == wxT( "jpeg" )) { exporttype = wxBITMAP_TYPE_JPEG; config->defGraphicExportType = 0; } else if ( e == wxT( "bmp" )) { exporttype = wxBITMAP_TYPE_BMP; config->defGraphicExportType = 0; } else if ( e == wxT( "pnm" )) { exporttype = wxBITMAP_TYPE_PNM; config->defGraphicExportType = 0; } else if ( e == wxT( "pcx" )) { exporttype = wxBITMAP_TYPE_PCX; config->defGraphicExportType = 0; } else if ( e == wxT( "tif" )) { exporttype = wxBITMAP_TYPE_TIF; config->defGraphicExportType = 0; } else { doMessageBox( this, wxString::Format( _( "Can't determine image handler for extension \"%s\", using default (PNG)" ), (const wxChar*)e)); filename.Append( wxT ( ".png" )); exporttype = wxBITMAP_TYPE_PNG; config->defGraphicExportType = 0; } config->defExportPath = exportFileDialog.GetDirectory(); wxBitmap bitmap( xsize, ysize ); wxMemoryDC dc; dc.SelectObject( bitmap ); painter = new DcPainter( &dc ); exportMode = true; doPaint(); exportMode = false; delete painter; painter = 0; if ( bitmap.SaveFile( filename, (wxBitmapType)exporttype )) { doMessageBox( this, wxString::Format( _("Picture exported to %s"), (const wxChar*)filename)); } } }
void TransferFunctionPropertyDialog::exportTransferFunction() { InviwoFileDialog exportFileDialog(this, "Export transfer function", "transferfunction", InviwoApplication::getPtr()->getPath(InviwoApplication::PATH_TRANSFERFUNCTIONS) ); exportFileDialog.setAcceptMode(QFileDialog::AcceptSave); exportFileDialog.setFileMode(QFileDialog::AnyFile); exportFileDialog.addExtension("itf", "Inviwo Transfer Function"); exportFileDialog.addExtension("png", "Transfer Function Image"); exportFileDialog.addExtension("", "All files"); // this will add "All files (*)" if (exportFileDialog.exec()) { std::string file = exportFileDialog.selectedFiles().at(0).toLocal8Bit().constData(); std::string extension = filesystem::getFileExtension(file); FileExtension fileExt = exportFileDialog.getSelectedFileExtension(); if (fileExt.extension_.empty()) { // fall-back to standard inviwo TF format fileExt.extension_ = "itf"; } // check whether file extension matches the selected one if (fileExt.extension_ != extension) { file.append(fileExt.extension_); } if (fileExt.extension_ == "png") { TransferFunction &tf = tfProperty_->get(); const Layer* layer = tf.getData(); vec2 texSize(tf.getTextureSize(), 1); const vec4* readData = static_cast<const vec4*>(layer->getRepresentation<LayerRAM>()->getData()); Layer writeLayer(layer->getDimensions(), DataVec4UINT8::get()); glm::u8vec4* writeData = static_cast<glm::u8vec4*>(writeLayer.getEditableRepresentation<LayerRAM>()->getData()); for (std::size_t i=0; i<texSize.x * texSize.y; ++i) { for (int c=0; c<4; ++c) { writeData[i][c] = static_cast<glm::u8>(std::min(std::max(readData[i][c] * 255.0f, 0.0f), 255.0f)); } } auto writer = DataWriterFactory::getPtr()->getWriterForTypeAndExtension<Layer>(extension); if (writer) { try { writer->setOverwrite(true); writer->writeData(&writeLayer, file); } catch (DataWriterException const& e) { util::log(e.getContext(), e.getMessage(), LogLevel::Error); } } else { LogError("Error: Cound not find a writer for the specified extension and data type"); } } else if (fileExt.extension_ == "itf") { IvwSerializer serializer(file); tfProperty_->get().serialize(serializer); serializer.writeFile(); } } }