From 9cf2c36d644d0aaa28797f57a3e71591d8e66973 Mon Sep 17 00:00:00 2001
From: Normand Briere <nbriere@noware.ca>
Date: Sun, 06 Oct 2019 10:56:18 -0400
Subject: [PATCH] Save image helper.

---
 CameraPane.java |    9 ++++
 Object3D.java   |    2 
 Grafreed.java   |  100 ++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 109 insertions(+), 2 deletions(-)

diff --git a/CameraPane.java b/CameraPane.java
index c7a4b69..7434ed9 100644
--- a/CameraPane.java
+++ b/CameraPane.java
@@ -9994,7 +9994,7 @@
                 ext = "png";
             Iterator iter = ImageIO.getImageWritersByFormatName(ext);
             if (iter.hasNext()) {
-            writer = (ImageWriter)iter.next();
+                writer = (ImageWriter)iter.next();
             }
             
 // patch for NULLE PART
@@ -18048,6 +18048,13 @@
 
             int[] pixels = selectsizebuffer.array();
             
+//            BufferedImage rendImage = new BufferedImage(OCCLUSION_SIZE, OCCLUSION_SIZE, BufferedImage.TYPE_INT_RGB);
+//            rendImage.setRGB(0,0, OCCLUSION_SIZE,OCCLUSION_SIZE, pixels, OCCLUSION_SIZE*(OCCLUSION_SIZE-1),-OCCLUSION_SIZE);
+//            
+//            Grafreed.SaveImage("testocclusion.jpg", rendImage, 0.5f);
+//            
+//            System.exit(0);
+            
             double r = 0, g = 0, b = 0;
 
             double count = 0;
diff --git a/Grafreed.java b/Grafreed.java
index 155cae5..320521a 100644
--- a/Grafreed.java
+++ b/Grafreed.java
@@ -24,6 +24,19 @@
 import java.net.Authenticator;
 import java.net.PasswordAuthentication;
 
+import java.util.Iterator;
+import java.util.Locale;
+
+import javax.imageio.IIOImage;
+import javax.imageio.ImageIO;
+import javax.imageio.ImageWriteParam;
+import javax.imageio.ImageWriter;
+import javax.imageio.plugins.jpeg.JPEGImageWriteParam;
+import javax.imageio.stream.ImageOutputStream;
+import javax.imageio.ImageWriteParam;
+
+import java.awt.image.*;
+
 //import com.jamonapi.*;
 public class Grafreed extends Applet implements ActionListener
 {        
@@ -65,6 +78,93 @@
         java.awt.Toolkit.getDefaultToolkit().beep();
     }
     
+    static String SaveImage(String filename, BufferedImage bufImage, float compressionQuality)
+    {
+        String ext = "jpg"; // filename.substring(filename.length()-3, filename.length())
+        
+        if (compressionQuality == 1)
+        {
+            ext = "png";
+        }
+        
+        BufferedImage rendImage; // = new BufferedImage(bufImage.getWidth(), bufImage.getHeight(), BufferedImage.TYPE_INT_RGB);
+
+        try
+        {
+            int[] storage = ((sun.awt.image.IntegerInterleavedRaster)bufImage.getRaster()).getDataStorage();
+            
+            rendImage = new BufferedImage(bufImage.getWidth(), bufImage.getHeight(), BufferedImage.TYPE_INT_RGB);
+            int[] storage2 = ((sun.awt.image.IntegerInterleavedRaster)rendImage.getRaster()).getDataStorage();
+
+            for (int i=storage.length; --i>=0;)
+            {
+                storage2[i] = storage[i];
+            }
+        }
+        catch (Exception e)
+        {
+            byte[] storage = ((sun.awt.image.ByteInterleavedRaster)bufImage.getRaster()).getDataStorage();
+            
+            rendImage = new BufferedImage(bufImage.getWidth(), bufImage.getHeight(), BufferedImage.TYPE_BYTE_GRAY);
+            byte[] storage2 = ((sun.awt.image.ByteInterleavedRaster)rendImage.getRaster()).getDataStorage();
+
+            for (int i=storage.length/2; --i>=0;)
+            {
+                storage2[i] = storage[2*i];
+            }
+        }
+        
+//        rendImage.setRGB(0,0,bufImage.getWidth(),bufImage.getHeight(),
+//                bufImage.getRGB(0, 0, bufImage.getWidth(), bufImage.getHeight(), null, 0, bufImage.getWidth()),
+//                0,bufImage.getWidth());
+//                //bufImage.getWidth()*(bufImage.getHeight()-1),-bufImage.getWidth());
+            
+        ImageWriter writer = null;
+        Iterator iter = ImageIO.getImageWritersByFormatName(ext);
+        
+        if (iter.hasNext()) {
+            writer = (ImageWriter)iter.next();
+        }
+
+//        int i = frames.size();
+//        
+//        filename = filename + (i%100000)/10000 + "" + (i%10000)/1000 + "" + (i%1000)/100 + "" + (i%100)/10 + "" + (i%10) + ".jpg";
+        
+        {
+            String fn = filename;
+            if (!fn.endsWith(".jpg"))
+            {
+                fn += ".jpg";
+            }
+            
+            java.io.File outfile = new java.io.File(fn);
+            
+            if (outfile.getParentFile() != null) // nov 2013
+                outfile.getParentFile().mkdirs();
+            
+            filename = outfile.getAbsolutePath();
+
+            //float compressionQuality = 0.85f;
+
+            try
+            {
+                ImageOutputStream ios = ImageIO.createImageOutputStream(outfile);
+                writer.setOutput(ios);
+                JPEGImageWriteParam iwparam=new JPEGImageWriteParam(Locale.getDefault());
+                iwparam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT) ;
+                iwparam.setCompressionQuality(compressionQuality);
+                writer.write(null, new IIOImage(rendImage, null, null), iwparam);
+                ios.flush();
+                writer.dispose();
+                ios.close();
+            }
+            catch(Exception e){};
+        }
+        
+        return ".jpg";
+//        return;// filename;
+    }
+    
     public static String RemovePrefix(String s, String prefix)
     {
         if (s != null && prefix != null && s.startsWith(prefix))
diff --git a/Object3D.java b/Object3D.java
index 56c17c2..0843864 100644
--- a/Object3D.java
+++ b/Object3D.java
@@ -6303,7 +6303,7 @@
         
         if (!selectmode && //display.DrawMode() != display.SELECTION &&
                 //(touched || (bRep != null && bRep.displaylist <= 0)))
-                (Globals.isLIVE() || touched) && Globals.COMPUTESHADOWWHENLIVE) // || (bRep != null && bRep.displaylist <= 0)))
+                ((Globals.isLIVE() && Globals.COMPUTESHADOWWHENLIVE) || touched)) // || (bRep != null && bRep.displaylist <= 0)))
         {
             Globals.lighttouched = true;
         } // all panes...

--
Gitblit v1.6.2