Search in sources :

Example 36 with SimpleImage

use of org.jwildfire.image.SimpleImage in project JWildfire by thargor6.

the class FlameControlsDelegate method solidRenderingMaterialSelectReflMapBtn_clicked.

public void solidRenderingMaterialSelectReflMapBtn_clicked() {
    MaterialSettings material = getSolidRenderingSelectedMaterial();
    if (material != null) {
        JFileChooser chooser = new ImageFileChooser(Tools.FILEEXT_PNG);
        if (Prefs.getPrefs().getInputImagePath() != null) {
            try {
                if (getCurrFlame().getBGImageFilename().length() > 0) {
                    chooser.setSelectedFile(new File(getCurrFlame().getBGImageFilename()));
                } else {
                    chooser.setCurrentDirectory(new File(Prefs.getPrefs().getInputImagePath()));
                }
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
        if (chooser.showOpenDialog(owner.getFlamePanel()) == JFileChooser.APPROVE_OPTION) {
            File file = chooser.getSelectedFile();
            try {
                String filename = file.getAbsolutePath();
                WFImage img = RessourceManager.getImage(filename);
                if (img.getImageWidth() < 2 || img.getImageHeight() < 2 || !(img instanceof SimpleImage)) {
                    throw new Exception("Invalid image");
                }
                Prefs.getPrefs().setLastInputImageFile(file);
                owner.saveUndoPoint();
                material.setReflMapFilename(filename);
                refreshReflMapColorIndicator();
                owner.refreshFlameImage(true, false, 1, true, false);
            } catch (Throwable ex) {
                owner.errorHandler.handleError(ex);
            }
        }
    }
}
Also used : JFileChooser(javax.swing.JFileChooser) WFImage(org.jwildfire.image.WFImage) MaterialSettings(org.jwildfire.create.tina.base.solidrender.MaterialSettings) ImageFileChooser(org.jwildfire.swing.ImageFileChooser) SimpleImage(org.jwildfire.image.SimpleImage) File(java.io.File)

Example 37 with SimpleImage

use of org.jwildfire.image.SimpleImage in project JWildfire by thargor6.

the class FlameFilePreview method createThumbnail.

public void createThumbnail() {
    if (currFile == null) {
        currThumbnail = null;
        return;
    }
    try {
        if (currFile.exists()) {
            int imgWidth = this.getPreferredSize().width;
            int imgHeight = this.getPreferredSize().height - BUTTON_HEIGHT;
            int quality = 50;
            SimpleImage preview;
            String filename = currFile.getAbsolutePath();
            ThumbnailCacheKey cacheKey = new ThumbnailCacheKey(filename);
            preview = ThumbnailCacheProvider.getThumbnail(cacheKey, imgWidth, imgHeight, quality);
            if (preview == null) {
                List<Flame> flames = new FlameReader(prefs).readFlames(filename);
                Flame flame = flames.get(0);
                double wScl = (double) imgWidth / (double) flame.getWidth();
                double hScl = (double) imgHeight / (double) flame.getHeight();
                flame.setPixelsPerUnit((wScl + hScl) * 0.5 * flame.getPixelsPerUnit());
                flame.setWidth(imgWidth);
                flame.setHeight(imgHeight);
                FlameRenderer renderer = new FlameRenderer(flame, prefs, false, true);
                renderer.setProgressUpdater(null);
                flame.setSampleDensity(quality);
                flame.setSpatialFilterRadius(0.0);
                RenderInfo info = new RenderInfo(imgWidth, imgHeight, RenderMode.PREVIEW);
                RenderedFlame res = renderer.renderFlame(info);
                preview = res.getImage();
                ThumbnailCacheProvider.storeThumbnail(cacheKey, imgWidth, imgHeight, quality, preview);
            }
            currThumbnail = new ImageIcon(preview.getBufferedImg());
        }
    } catch (Exception ex) {
        currThumbnail = null;
        if (ex.getCause() != null) {
            ex.getCause().printStackTrace();
        } else {
            ex.printStackTrace();
        }
    }
}
Also used : ImageIcon(javax.swing.ImageIcon) FlameReader(org.jwildfire.create.tina.io.FlameReader) RenderedFlame(org.jwildfire.create.tina.render.RenderedFlame) SimpleImage(org.jwildfire.image.SimpleImage) FlameRenderer(org.jwildfire.create.tina.render.FlameRenderer) RenderInfo(org.jwildfire.create.tina.render.RenderInfo) Flame(org.jwildfire.create.tina.base.Flame) RenderedFlame(org.jwildfire.create.tina.render.RenderedFlame)

Example 38 with SimpleImage

use of org.jwildfire.image.SimpleImage in project JWildfire by thargor6.

the class FlamePreviewHelper method fastRenderFlameImage.

public SimpleImage fastRenderFlameImage(boolean pQuickRender, boolean pMouseDown, int pDownScale) {
    FlamePanel imgPanel = flamePanelProvider.getFlamePanel();
    FlamePanelConfig cfg = flamePanelProvider.getFlamePanelConfig();
    Rectangle panelBounds = imgPanel.getParentImageBounds();
    Rectangle bounds;
    if (pDownScale != 1) {
        bounds = new Rectangle(panelBounds.width / pDownScale, panelBounds.height / pDownScale);
    } else {
        bounds = panelBounds;
    }
    int renderScale = pQuickRender && pMouseDown ? 2 : 1;
    int width = bounds.width / renderScale;
    int height = bounds.height / renderScale;
    if (width >= 16 && height >= 16) {
        RenderInfo info = new RenderInfo(width, height, RenderMode.PREVIEW);
        Flame flame = flameHolder.getFlame();
        if (flame != null) {
            double oldSpatialFilterRadius = flame.getSpatialFilterRadius();
            double oldSampleDensity = flame.getSampleDensity();
            int oldSpatialOversampling = flame.getSpatialOversampling();
            boolean oldPostNoiseFilter = flame.isPostNoiseFilter();
            try {
                double wScl = (double) info.getImageWidth() / (double) flame.getWidth();
                double hScl = (double) info.getImageHeight() / (double) flame.getHeight();
                flame.setPixelsPerUnit((wScl + hScl) * 0.5 * flame.getPixelsPerUnit());
                flame.setWidth(info.getImageWidth());
                flame.setHeight(info.getImageHeight());
                try {
                    FlameRenderer renderer;
                    if (isDrawFocusPointEnabled(cfg)) {
                        renderer = new DrawFocusPointFlameRenderer(flame, prefs, isTransparencyEnabled());
                    } else {
                        renderer = new FlameRenderer(flame, prefs, isTransparencyEnabled(), false);
                    }
                    renderer.setProgressUpdater(null);
                    flame.setSampleDensity(prefs.getTinaRenderRealtimeQuality());
                    flame.applyFastOversamplingSettings();
                    renderer.setRenderScale(renderScale);
                    RenderedFlame res = renderer.renderFlame(info);
                    SimpleImage img = res.getImage();
                    img.getBufferedImg().setAccelerationPriority(1.0f);
                    return img;
                } catch (Throwable ex) {
                    errorHandler.handleError(ex);
                }
            } finally {
                flame.setSampleDensity(oldSampleDensity);
                flame.setSpatialFilterRadius(oldSpatialFilterRadius);
                flame.setSpatialOversampling(oldSpatialOversampling);
                flame.setPostNoiseFilter(oldPostNoiseFilter);
            }
        }
    }
    return null;
}
Also used : Rectangle(java.awt.Rectangle) FlamePanel(org.jwildfire.create.tina.swing.flamepanel.FlamePanel) DrawFocusPointFlameRenderer(org.jwildfire.create.tina.render.DrawFocusPointFlameRenderer) XYZProjectedPoint(org.jwildfire.create.tina.base.XYZProjectedPoint) RenderedFlame(org.jwildfire.create.tina.render.RenderedFlame) SimpleImage(org.jwildfire.image.SimpleImage) DrawFocusPointFlameRenderer(org.jwildfire.create.tina.render.DrawFocusPointFlameRenderer) FlameRenderer(org.jwildfire.create.tina.render.FlameRenderer) RenderInfo(org.jwildfire.create.tina.render.RenderInfo) FlamePanelConfig(org.jwildfire.create.tina.swing.flamepanel.FlamePanelConfig) Flame(org.jwildfire.create.tina.base.Flame) RenderedFlame(org.jwildfire.create.tina.render.RenderedFlame)

Example 39 with SimpleImage

use of org.jwildfire.image.SimpleImage in project JWildfire by thargor6.

the class FlamePreviewHelper method createLayerPreview.

private SimpleImage createLayerPreview(SimpleImage img, int renderScale, int width, int height) {
    FlamePanelConfig cfg = flamePanelProvider.getFlamePanelConfig();
    Flame flame = flameHolder.getFlame();
    Layer onlyVisibleLayer = null;
    for (Layer layer : flameHolder.getFlame().getLayers()) {
        if (layer.isVisible()) {
            if (onlyVisibleLayer == null) {
                onlyVisibleLayer = layer;
            } else {
                onlyVisibleLayer = null;
                break;
            }
        }
    }
    boolean drawSubLayer = flame.getLayers().size() > 1 && layerHolder.getLayer() != null && layerHolder.getLayer() != onlyVisibleLayer && !cfg.isNoControls();
    if (drawSubLayer) {
        Flame singleLayerFlame = new Flame();
        singleLayerFlame.assign(flame);
        singleLayerFlame.getLayers().clear();
        singleLayerFlame.getLayers().add(layerHolder.getLayer().makeCopy());
        singleLayerFlame.getFirstLayer().setVisible(true);
        singleLayerFlame.getFirstLayer().setWeight(1.0);
        RenderInfo lInfo = new RenderInfo(width / 4 * renderScale, height / 4 * renderScale, RenderMode.PREVIEW);
        double lWScl = (double) lInfo.getImageWidth() / (double) singleLayerFlame.getWidth();
        double lHScl = (double) lInfo.getImageHeight() / (double) singleLayerFlame.getHeight();
        singleLayerFlame.setPixelsPerUnit((lWScl + lHScl) * 0.5 * singleLayerFlame.getPixelsPerUnit() * 0.5);
        singleLayerFlame.setWidth(lInfo.getImageWidth());
        singleLayerFlame.setHeight(lInfo.getImageHeight());
        singleLayerFlame.setSampleDensity(prefs.getTinaRenderRealtimeQuality() * 2.0 / 3.0);
        FlameRenderer lRenderer = new FlameRenderer(singleLayerFlame, prefs, false, false);
        RenderedFlame lRes = lRenderer.renderFlame(lInfo);
        SimpleImage layerImg = lRes.getImage();
        boolean drawLayerNumber = true;
        if (drawLayerNumber) {
            RectangleTransformer rT = new RectangleTransformer();
            int textWidth = 28;
            int textHeight = 22;
            int margin = 2;
            rT.setColor(new java.awt.Color(0, 0, 0));
            rT.setLeft(layerImg.getImageWidth() - textWidth - 2 * margin);
            rT.setTop(layerImg.getImageHeight() - textHeight - 2 * margin);
            rT.setThickness(textHeight / 2 + 1);
            rT.setWidth(textWidth);
            rT.setHeight(textHeight);
            rT.transformImage(layerImg);
            TextTransformer txt = new TextTransformer();
            txt.setText1("  " + (flame.getLayers().indexOf(layerHolder.getLayer()) + 1) + "  ");
            txt.setAntialiasing(true);
            txt.setColor(new java.awt.Color(200, 200, 200));
            txt.setMode(Mode.NORMAL);
            txt.setFontStyle(FontStyle.BOLD);
            txt.setFontName("Arial");
            txt.setFontSize(16);
            txt.setHAlign(HAlignment.NONE);
            txt.setPosX(layerImg.getImageWidth() - textWidth - margin);
            txt.setPosY(layerImg.getImageHeight() - textHeight - margin);
            txt.setVAlign(VAlignment.NONE);
            txt.transformImage(layerImg);
        }
        RectangleTransformer rT = new RectangleTransformer();
        rT.setColor(new java.awt.Color(200, 200, 200));
        rT.setLeft(0);
        rT.setTop(0);
        rT.setThickness(3);
        rT.setWidth(lInfo.getImageWidth());
        rT.setHeight(lInfo.getImageHeight());
        rT.transformImage(layerImg);
        return layerImg;
    }
    return null;
}
Also used : Color(java.awt.Color) TextTransformer(org.jwildfire.transform.TextTransformer) Layer(org.jwildfire.create.tina.base.Layer) RenderedFlame(org.jwildfire.create.tina.render.RenderedFlame) XYZProjectedPoint(org.jwildfire.create.tina.base.XYZProjectedPoint) SimpleImage(org.jwildfire.image.SimpleImage) RectangleTransformer(org.jwildfire.transform.RectangleTransformer) DrawFocusPointFlameRenderer(org.jwildfire.create.tina.render.DrawFocusPointFlameRenderer) FlameRenderer(org.jwildfire.create.tina.render.FlameRenderer) RenderInfo(org.jwildfire.create.tina.render.RenderInfo) FlamePanelConfig(org.jwildfire.create.tina.swing.flamepanel.FlamePanelConfig) Flame(org.jwildfire.create.tina.base.Flame) RenderedFlame(org.jwildfire.create.tina.render.RenderedFlame)

Example 40 with SimpleImage

use of org.jwildfire.image.SimpleImage in project JWildfire by thargor6.

the class FlamePreviewHelper method renderFlameImage.

public SimpleImage renderFlameImage(boolean pQuickRender, boolean pMouseDown, int pDownScale, boolean pAllowUseCache) {
    if (!pAllowUseCache) {
        prevRaster = null;
    }
    FlamePanel imgPanel = flamePanelProvider.getFlamePanel();
    FlamePanelConfig cfg = flamePanelProvider.getFlamePanelConfig();
    Rectangle panelBounds = imgPanel.getParentImageBounds();
    Rectangle bounds;
    if (pDownScale != 1) {
        bounds = new Rectangle(panelBounds.width / pDownScale, panelBounds.height / pDownScale);
    } else {
        bounds = panelBounds;
    }
    int renderScale = pQuickRender && pMouseDown ? 2 : 1;
    int width = bounds.width / renderScale;
    int height = bounds.height / renderScale;
    if (width >= 16 && height >= 16) {
        RenderInfo info = new RenderInfo(width, height, RenderMode.PREVIEW);
        Flame flame = flameHolder.getFlame();
        if (flame != null) {
            double oldSpatialFilterRadius = flame.getSpatialFilterRadius();
            double oldSampleDensity = flame.getSampleDensity();
            int oldSpatialOversampling = flame.getSpatialOversampling();
            boolean oldPostNoiseFilter = flame.isPostNoiseFilter();
            try {
                double wScl = (double) info.getImageWidth() / (double) flame.getWidth();
                double hScl = (double) info.getImageHeight() / (double) flame.getHeight();
                flame.setPixelsPerUnit((wScl + hScl) * 0.5 * flame.getPixelsPerUnit());
                flame.setWidth(info.getImageWidth());
                flame.setHeight(info.getImageHeight());
                try {
                    FlameRenderer renderer;
                    if (pQuickRender) {
                        flame.setSampleDensity(prefs.getTinaRenderRealtimeQuality());
                        flame.applyFastOversamplingSettings();
                        flame.setSpatialOversampling(oldSpatialOversampling);
                    } else {
                        flame.setSampleDensity(prefs.getTinaRenderPreviewQuality());
                    }
                    if (isDrawFocusPointEnabled(cfg)) {
                        renderer = new DrawFocusPointFlameRenderer(flame, prefs, isTransparencyEnabled());
                    } else {
                        renderer = new FlameRenderer(flame, prefs, isTransparencyEnabled(), false);
                    }
                    if (pQuickRender) {
                        renderer.setProgressUpdater(null);
                    } else {
                        renderer.setProgressUpdater(mainProgressUpdater);
                    }
                    long t0 = System.currentTimeMillis();
                    renderer.setRenderScale(renderScale);
                    RenderedFlame res;
                    if (prevRaster != null && pAllowUseCache) {
                        info.setStoreRaster(false);
                        info.setRestoredRaster(prevRaster);
                        flame.setSampleDensity(prevRaster.getSampleDensity());
                        res = renderer.renderFlame(info);
                    } else {
                        info.setStoreRaster(true);
                        res = renderer.renderFlame(info);
                        prevRaster = res.getRaster();
                    }
                    SimpleImage img = res.getImage();
                    long t1 = System.currentTimeMillis();
                    img.getBufferedImg().setAccelerationPriority(1.0f);
                    if (layerAppendBtn != null && layerAppendBtn.isSelected() && !pMouseDown) {
                        showLayerAppendModeIndicator(img);
                    }
                    if (layerPreviewBtn != null && layerPreviewBtn.isSelected() && layerHolder != null) {
                        SimpleImage layerImg = createLayerPreview(img, renderScale, width, height);
                        showLayerPreview(img, layerImg, renderScale, width, height);
                    }
                    if (pDownScale != 1) {
                        SimpleImage background = new SimpleImage(panelBounds.width, panelBounds.height);
                        ComposeTransformer cT = new ComposeTransformer();
                        cT.setHAlign(ComposeTransformer.HAlignment.CENTRE);
                        cT.setVAlign(ComposeTransformer.VAlignment.CENTRE);
                        cT.setForegroundImage(img);
                        cT.transformImage(background);
                        img = background;
                    }
                    if (!cfg.isNoControls() && messageHelper != null) {
                        messageHelper.showStatusMessage(flame, "render time: " + Tools.doubleToString((t1 - t0) * 0.001) + "s");
                    }
                    return img;
                } catch (Throwable ex) {
                    errorHandler.handleError(ex);
                }
            } finally {
                flame.setSpatialFilterRadius(oldSpatialFilterRadius);
                flame.setSampleDensity(oldSampleDensity);
                flame.setSpatialOversampling(oldSpatialOversampling);
                flame.setPostNoiseFilter(oldPostNoiseFilter);
            }
        }
    }
    return null;
}
Also used : ComposeTransformer(org.jwildfire.transform.ComposeTransformer) Rectangle(java.awt.Rectangle) FlamePanel(org.jwildfire.create.tina.swing.flamepanel.FlamePanel) DrawFocusPointFlameRenderer(org.jwildfire.create.tina.render.DrawFocusPointFlameRenderer) XYZProjectedPoint(org.jwildfire.create.tina.base.XYZProjectedPoint) RenderedFlame(org.jwildfire.create.tina.render.RenderedFlame) SimpleImage(org.jwildfire.image.SimpleImage) DrawFocusPointFlameRenderer(org.jwildfire.create.tina.render.DrawFocusPointFlameRenderer) FlameRenderer(org.jwildfire.create.tina.render.FlameRenderer) RenderInfo(org.jwildfire.create.tina.render.RenderInfo) FlamePanelConfig(org.jwildfire.create.tina.swing.flamepanel.FlamePanelConfig) Flame(org.jwildfire.create.tina.base.Flame) RenderedFlame(org.jwildfire.create.tina.render.RenderedFlame)

Aggregations

SimpleImage (org.jwildfire.image.SimpleImage)174 Pixel (org.jwildfire.image.Pixel)37 ImagePanel (org.jwildfire.swing.ImagePanel)24 FlamePanel (org.jwildfire.create.tina.swing.flamepanel.FlamePanel)20 Dimension (java.awt.Dimension)18 Flame (org.jwildfire.create.tina.base.Flame)17 File (java.io.File)16 RenderedFlame (org.jwildfire.create.tina.render.RenderedFlame)16 ArrayList (java.util.ArrayList)14 Rectangle (java.awt.Rectangle)12 FlameRenderer (org.jwildfire.create.tina.render.FlameRenderer)12 RenderInfo (org.jwildfire.create.tina.render.RenderInfo)12 Graphics (java.awt.Graphics)10 SimpleHDRImage (org.jwildfire.image.SimpleHDRImage)10 WFImage (org.jwildfire.image.WFImage)9 ImageReader (org.jwildfire.io.ImageReader)9 JPanel (javax.swing.JPanel)8 JScrollPane (javax.swing.JScrollPane)8 ResolutionProfile (org.jwildfire.base.ResolutionProfile)8 Color (java.awt.Color)7