Search in sources :

Example 6 with RenderInfo

use of org.jwildfire.create.tina.render.RenderInfo 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 7 with RenderInfo

use of org.jwildfire.create.tina.render.RenderInfo 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 8 with RenderInfo

use of org.jwildfire.create.tina.render.RenderInfo 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 9 with RenderInfo

use of org.jwildfire.create.tina.render.RenderInfo 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)

Example 10 with RenderInfo

use of org.jwildfire.create.tina.render.RenderInfo in project JWildfire by thargor6.

the class DetachedPreviewController method startRender.

public void startRender() {
    cancelRender();
    setPaused(false);
    currQuality = 0.0;
    if (flame == null || refreshing) {
        return;
    }
    refreshImagePanel();
    clearScreen();
    ImgSize size = getImgSize();
    RenderInfo info = new RenderInfo(size.getWidth(), size.getHeight(), RenderMode.PREVIEW);
    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());
    flame.setSampleDensity(10);
    info.setRenderHDR(false);
    info.setRenderZBuffer(false);
    new FlameBGColorHandler(flame).fillBackground(image);
    renderer = new FlameRenderer(flame, prefs, flame.isBGTransparency(), false);
    renderer.registerIterationObserver(this);
    displayUpdater = createDisplayUpdater();
    displayUpdater.initRender(prefs.getTinaRenderThreads());
    threads = renderer.startRenderFlame(info);
    for (Thread thread : threads.getExecutingThreads()) {
        thread.setPriority(Thread.MIN_PRIORITY);
    }
    updateDisplayThread = new UpdateDisplayThread();
    updateDisplayExecuteThread = new Thread(updateDisplayThread);
    updateDisplayExecuteThread.setPriority(Thread.MIN_PRIORITY);
    updateDisplayExecuteThread.start();
    state = State.RENDER;
}
Also used : FlameBGColorHandler(org.jwildfire.create.tina.render.FlameBGColorHandler) FlameRenderer(org.jwildfire.create.tina.render.FlameRenderer) RenderInfo(org.jwildfire.create.tina.render.RenderInfo) AbstractRenderThread(org.jwildfire.create.tina.render.AbstractRenderThread)

Aggregations

FlameRenderer (org.jwildfire.create.tina.render.FlameRenderer)28 RenderInfo (org.jwildfire.create.tina.render.RenderInfo)28 RenderedFlame (org.jwildfire.create.tina.render.RenderedFlame)24 Flame (org.jwildfire.create.tina.base.Flame)21 SimpleImage (org.jwildfire.image.SimpleImage)12 Rectangle (java.awt.Rectangle)10 FlamePanel (org.jwildfire.create.tina.swing.flamepanel.FlamePanel)9 XYZProjectedPoint (org.jwildfire.create.tina.base.XYZProjectedPoint)4 DrawFocusPointFlameRenderer (org.jwildfire.create.tina.render.DrawFocusPointFlameRenderer)4 ImageIcon (javax.swing.ImageIcon)3 FlameReader (org.jwildfire.create.tina.io.FlameReader)3 AbstractRenderThread (org.jwildfire.create.tina.render.AbstractRenderThread)3 FlamePanelConfig (org.jwildfire.create.tina.swing.flamepanel.FlamePanelConfig)3 Layer (org.jwildfire.create.tina.base.Layer)2 FlameBGColorHandler (org.jwildfire.create.tina.render.FlameBGColorHandler)2 ImageWriter (org.jwildfire.io.ImageWriter)2 TextTransformer (org.jwildfire.transform.TextTransformer)2 Color (java.awt.Color)1 Point (java.awt.Point)1 File (java.io.File)1