Search in sources :

Example 6 with PNGImageContent

use of org.knime.core.data.image.png.PNGImageContent in project knime-core by knime.

the class DecTreeToImageNodeModel method execute.

/**
 * {@inheritDoc}
 */
@Override
public PortObject[] execute(final PortObject[] inPorts, final ExecutionContext exec) throws CanceledExecutionException, Exception {
    exec.setMessage("Decision Tree To Image: Loading model...");
    PMMLPortObject port = (PMMLPortObject) inPorts[0];
    List<Node> models = port.getPMMLValue().getModels(PMMLModelType.TreeModel);
    if (models.isEmpty()) {
        String msg = "Decision Tree evaluation failed: " + "No tree model found.";
        LOGGER.error(msg);
        throw new RuntimeException(msg);
    }
    PMMLDecisionTreeTranslator trans = new PMMLDecisionTreeTranslator();
    port.initializeModelTranslator(trans);
    m_decTree = trans.getDecisionTree();
    m_decTree.resetColorInformation();
    String colorColumn = null;
    if (null != inPorts[1]) {
        BufferedDataTable inData = (BufferedDataTable) inPorts[1];
        // get column with color information
        for (DataColumnSpec s : inData.getDataTableSpec()) {
            if (s.getColorHandler() != null) {
                colorColumn = s.getName();
                break;
            }
        }
        m_decTree.setColorColumn(colorColumn);
        for (DataRow thisRow : inData) {
            m_decTree.addCoveredColor(thisRow, inData.getDataTableSpec());
        }
    }
    // create PNG via streamed string
    ByteArrayOutputStream os = new ByteArrayOutputStream();
    int width = m_settings.getWidth();
    int height = m_settings.getHeight();
    GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
    BufferedImage image = null;
    if (env.isHeadlessInstance()) {
        image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
    } else {
        // create compatible image for better performance
        GraphicsConfiguration gfxConf = env.getDefaultScreenDevice().getDefaultConfiguration();
        // image = gfxConf.createCompatibleImage(width, height);
        // with binary transparency
        image = gfxConf.createCompatibleImage(width, height, Transparency.BITMASK);
    // with transparency
    // image = gfxConf.createCompatibleImage(width, height,
    // Transparency.TRANSLUCENT);
    }
    Graphics2D g = (Graphics2D) image.getGraphics();
    DecisionTreeNode root = null != getDecisionTree() ? getDecisionTree().getRootNode() : null;
    DecTreeGraphView graph = new DecTreeToImageGraphView(root, colorColumn, m_settings);
    // draw graph
    graph.getView().paint(g);
    // write png
    ImageIO.write(image, "png", os);
    ByteArrayInputStream is = new ByteArrayInputStream(os.toByteArray());
    m_imageContent = new PNGImageContent(is);
    ImagePortObjectSpec outSpec = new ImagePortObjectSpec(PNGImageContent.TYPE);
    // return image object
    PortObject po = new ImagePortObject(m_imageContent, outSpec);
    return new PortObject[] { po };
}
Also used : PNGImageContent(org.knime.core.data.image.png.PNGImageContent) PMMLDecisionTreeTranslator(org.knime.base.node.mine.decisiontree2.PMMLDecisionTreeTranslator) ImagePortObjectSpec(org.knime.core.node.port.image.ImagePortObjectSpec) DecisionTreeNode(org.knime.base.node.mine.decisiontree2.model.DecisionTreeNode) Node(org.w3c.dom.Node) ByteArrayOutputStream(java.io.ByteArrayOutputStream) GraphicsEnvironment(java.awt.GraphicsEnvironment) ImagePortObject(org.knime.core.node.port.image.ImagePortObject) DataRow(org.knime.core.data.DataRow) BufferedImage(java.awt.image.BufferedImage) GraphicsConfiguration(java.awt.GraphicsConfiguration) Graphics2D(java.awt.Graphics2D) DataColumnSpec(org.knime.core.data.DataColumnSpec) DecTreeGraphView(org.knime.base.node.mine.decisiontree2.view.DecTreeGraphView) PMMLPortObject(org.knime.core.node.port.pmml.PMMLPortObject) ByteArrayInputStream(java.io.ByteArrayInputStream) BufferedDataTable(org.knime.core.node.BufferedDataTable) PortObject(org.knime.core.node.port.PortObject) PMMLPortObject(org.knime.core.node.port.pmml.PMMLPortObject) ImagePortObject(org.knime.core.node.port.image.ImagePortObject) DecisionTreeNode(org.knime.base.node.mine.decisiontree2.model.DecisionTreeNode)

Aggregations

PNGImageContent (org.knime.core.data.image.png.PNGImageContent)6 IOException (java.io.IOException)4 Graphics2D (java.awt.Graphics2D)2 BufferedImage (java.awt.image.BufferedImage)2 ByteArrayInputStream (java.io.ByteArrayInputStream)2 ByteArrayOutputStream (java.io.ByteArrayOutputStream)2 File (java.io.File)2 InputStream (java.io.InputStream)2 ImageContent (org.knime.core.data.image.ImageContent)2 InvalidSettingsException (org.knime.core.node.InvalidSettingsException)2 PortObject (org.knime.core.node.port.PortObject)2 ImagePortObject (org.knime.core.node.port.image.ImagePortObject)2 GraphicsConfiguration (java.awt.GraphicsConfiguration)1 GraphicsEnvironment (java.awt.GraphicsEnvironment)1 BufferedInputStream (java.io.BufferedInputStream)1 FileInputStream (java.io.FileInputStream)1 FileOutputStream (java.io.FileOutputStream)1 ObjectInputStream (java.io.ObjectInputStream)1 URL (java.net.URL)1 HashMap (java.util.HashMap)1