From: <ha...@us...> - 2008-12-09 04:37:36
|
Revision: 10468 http://jmol.svn.sourceforge.net/jmol/?rev=10468&view=rev Author: hansonr Date: 2008-12-09 04:37:32 +0000 (Tue, 09 Dec 2008) Log Message: ----------- version=11.7.18_dev export/image refactoring, new feature # new feature: (embedded application method of JmolViewer): # # Object viewer.getImageAs(String type, # int quality, # String filename, # OutputStream outputStream); # # allows creation of an image of a given type ("JPG", "JPEG", "JPG64", "PNG", "GIF", "PPM") # of a specific quality (-1 indicates default) # 0 to 100 for JPG (-1 = default of 75) # 0-9 for PNG (-1 = default of 2) # and returned as byte[] (when fileName = null, os = null) # or sent to an output stream (os != null) # or set to a file (os == null, fileName != null) # # return can be String if there is an error. # # command sequence, for example: # # jmol.viewer.scriptWait("load =1crn;cartoons on;set antialiasdisplay"); # jmol.viewer.getImageAs("JPG", 75, "t75.jpg", null); # byte[] bytes = jmol.viewer.getImageAs("JPG", 75, "t75.jpg", null); # # note: You do have to use # # set antialiasDisplay # # to get precision drawing mode; this is not automatic, as for the write command # # primarily, this is for writing to an OutputStream directly, but # the rest seemed simple to implement along with that. # # ----------------------------------------------------------------------------- Modified Paths: -------------- trunk/Jmol/src/org/jmol/api/JmolImageCreatorInterface.java trunk/Jmol/src/org/jmol/api/JmolViewer.java trunk/Jmol/src/org/jmol/applet/Jmol.java trunk/Jmol/src/org/jmol/applet/Jvm12.java trunk/Jmol/src/org/jmol/export/image/GifEncoder.java trunk/Jmol/src/org/jmol/export/image/ImageCreator.java trunk/Jmol/src/org/jmol/export/image/ImageEncoder.java trunk/Jmol/src/org/jmol/export/image/PngEncoder.java trunk/Jmol/src/org/jmol/export/image/PpmEncoder.java trunk/Jmol/src/org/jmol/util/Base64.java trunk/Jmol/src/org/jmol/util/JpegEncoder.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties trunk/Jmol/src/org/jmol/viewer/PropertyManager.java trunk/Jmol/src/org/jmol/viewer/Viewer.java trunk/Jmol/src/org/openscience/jmol/app/Jmol.java Modified: trunk/Jmol/src/org/jmol/api/JmolImageCreatorInterface.java =================================================================== --- trunk/Jmol/src/org/jmol/api/JmolImageCreatorInterface.java 2008-12-08 20:33:57 UTC (rev 10467) +++ trunk/Jmol/src/org/jmol/api/JmolImageCreatorInterface.java 2008-12-09 04:37:32 UTC (rev 10468) @@ -1,5 +1,8 @@ package org.jmol.api; +import java.io.IOException; +import java.io.OutputStream; + public interface JmolImageCreatorInterface { abstract public void setViewer(JmolViewer viewer); @@ -16,6 +19,8 @@ * @param quality * @return null (canceled) or a message starting with OK or an error message */ - abstract public String createImage(String fileName, String type, Object text_or_bytes, int quality); + abstract public Object createImage(String fileName, String type, Object text_or_bytes, int quality); + + abstract public Object getImageBytes(String type, int quality, String fileName, OutputStream os) throws IOException; } Modified: trunk/Jmol/src/org/jmol/api/JmolViewer.java =================================================================== --- trunk/Jmol/src/org/jmol/api/JmolViewer.java 2008-12-08 20:33:57 UTC (rev 10467) +++ trunk/Jmol/src/org/jmol/api/JmolViewer.java 2008-12-09 04:37:32 UTC (rev 10468) @@ -30,6 +30,7 @@ import java.awt.Graphics; import java.awt.Image; import java.awt.Rectangle; +import java.io.OutputStream; import java.io.Reader; import java.net.URL; import java.util.BitSet; @@ -168,6 +169,15 @@ abstract public String createImage(String fileName, String type, Object text_or_bytes, int quality, int width, int height); + /** + * @param type "PNG", "JPG", "JPEG", "JPG64", "PPM", "GIF" + * @param quality + * @param fileName + * @param os + * @return base64-encoded or binary version of the image + */ + abstract public Object getImageAs(String type, int quality, String fileName, OutputStream os); + abstract public boolean handleOldJvm10Event(Event e); abstract public int getMotionEventNumber(); Modified: trunk/Jmol/src/org/jmol/applet/Jmol.java =================================================================== --- trunk/Jmol/src/org/jmol/applet/Jmol.java 2008-12-08 20:33:57 UTC (rev 10467) +++ trunk/Jmol/src/org/jmol/applet/Jmol.java 2008-12-09 04:37:32 UTC (rev 10468) @@ -1095,9 +1095,8 @@ boolean isImage = (quality != Integer.MIN_VALUE); if (isSigned) { if (jvm12 != null) { - if (isImage && (fileName == null || fileName.equalsIgnoreCase("CLIPBOARD"))) { - jvm12.clipImage(); - return "OK"; + if (fileName == null || fileName.equalsIgnoreCase("CLIPBOARD")) { + return jvm12.clipImage(isImage ? null : (String) text_or_bytes); } try { return jvm12.createImage(fileName, type, text_or_bytes, quality); Modified: trunk/Jmol/src/org/jmol/applet/Jvm12.java =================================================================== --- trunk/Jmol/src/org/jmol/applet/Jvm12.java 2008-12-08 20:33:57 UTC (rev 10467) +++ trunk/Jmol/src/org/jmol/applet/Jvm12.java 2008-12-09 04:37:32 UTC (rev 10468) @@ -176,31 +176,30 @@ */ String createImage(String fileName, String type, Object text_or_bytes, int quality) { - if (fileName != null) { - if (quality == Integer.MIN_VALUE) { - // text or bytes - fileName = dialogAsk("save", fileName); - } else { - imageType = type.toUpperCase(); - imageQuality = quality; - fileName = dialogAsk("saveImage+" + type, fileName); - quality = imageQuality; - type = imageType; - } - if (fileName == null) - return null; + if (quality == Integer.MIN_VALUE) { + // text or bytes + fileName = dialogAsk("save", fileName); + } else { + imageType = type.toUpperCase(); + imageQuality = quality; + fileName = dialogAsk("saveImage+" + type, fileName); + quality = imageQuality; + type = imageType; } + if (fileName == null) + return null; JmolImageCreatorInterface c = (JmolImageCreatorInterface) Interface .getOptionInterface("export.image.ImageCreator"); c.setViewer(viewer); - return c.createImage(fileName, type, text_or_bytes, quality); + return (String) c.createImage(fileName, type, text_or_bytes, quality); } - void clipImage() { + String clipImage(String text) { JmolImageCreatorInterface c = (JmolImageCreatorInterface) Interface .getOptionInterface("export.image.ImageCreator"); c.setViewer(viewer); - c.clipImage(null); + c.clipImage(text); + return (text == null ? "OK" : "OK " + text.length()); } String getClipboardText() { Modified: trunk/Jmol/src/org/jmol/export/image/GifEncoder.java =================================================================== --- trunk/Jmol/src/org/jmol/export/image/GifEncoder.java 2008-12-08 20:33:57 UTC (rev 10467) +++ trunk/Jmol/src/org/jmol/export/image/GifEncoder.java 2008-12-09 04:37:32 UTC (rev 10468) @@ -65,6 +65,22 @@ private boolean interlace = false; + public static void write(Image image, OutputStream os) throws IOException { + (new GifEncoder(image, os)).encode(); + } + + public static byte[] getBytes(Image image) { + ByteArrayOutputStream os = new ByteArrayOutputStream(); + try { + write(image, os); + os.flush(); + os.close(); + } catch (IOException e) { + // ignore + } + return os.toByteArray(); + } + /// Constructor from Image. // @param img The image to encode. // @param out The stream to write the GIF to. @@ -741,5 +757,6 @@ a_count = 0; } } + } Modified: trunk/Jmol/src/org/jmol/export/image/ImageCreator.java =================================================================== --- trunk/Jmol/src/org/jmol/export/image/ImageCreator.java 2008-12-08 20:33:57 UTC (rev 10467) +++ trunk/Jmol/src/org/jmol/export/image/ImageCreator.java 2008-12-09 04:37:32 UTC (rev 10468) @@ -26,10 +26,10 @@ import java.awt.Image; import java.io.BufferedWriter; -import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; +import java.io.OutputStream; import java.io.OutputStreamWriter; import org.jmol.api.JmolImageCreatorInterface; @@ -80,16 +80,12 @@ * @param quality * @return null (canceled) or a message starting with OK or an error message */ - public String createImage(String fileName, String type, Object text_or_bytes, + public Object createImage(String fileName, String type, Object text_or_bytes, int quality) { // returns message starting with OK or an error message boolean isBytes = (text_or_bytes instanceof byte[]); String text = (isBytes ? null : (String) text_or_bytes); boolean isText = (quality == Integer.MIN_VALUE); - if (fileName == null) { - clipImage(text); - return "OK " + text.length(); - } if ((isText || isBytes) && text_or_bytes == null) return "NO DATA"; FileOutputStream os = null; @@ -109,43 +105,17 @@ bw.write(text); bw.close(); os = null; - } else { - Image eImage = viewer.getScreenImage(); - if (eImage != null) { - len = 1; - os = new FileOutputStream(fileName); - if (type.equalsIgnoreCase("JPEG") || type.equalsIgnoreCase("JPG")) { - if (quality <= 0) - quality = 75; - (new JpegEncoder(eImage, quality, os)).Compress(); - } else if (type.equalsIgnoreCase("JPG64")) { - ByteArrayOutputStream osb = new ByteArrayOutputStream(); - (new JpegEncoder(eImage, quality, osb)).Compress(); - osb.flush(); - osb.close(); - StringBuffer jpg = Base64.getBase64(osb.toByteArray()); - os.write(Base64.toBytes(jpg)); - } else if (type.equalsIgnoreCase("PNG")) { - if (quality < 0) - quality = 2; - else if (quality > 9) - quality = 9; - byte[] pngbytes = (new PngEncoder(eImage, false, - PngEncoder.FILTER_NONE, quality)).pngEncode(); - os.write(pngbytes); - } else if (type.equalsIgnoreCase("PPM")) { - (new PpmEncoder(eImage, os)).encode(); - } else if (type.equalsIgnoreCase("GIF")) { - (new GifEncoder(eImage, os)).encode(); - } - os.flush(); - os.close(); - len = (new File(fileName)).length(); - } - viewer.releaseScreenImage(); + } else { + len = 1; + Object bytesOrError = getImageBytes(type, quality, fileName, null); + if (bytesOrError instanceof String) + return bytesOrError; + byte[] bytes = (byte[]) bytesOrError; + if (bytes != null) + return bytes; + len = (new File(fileName)).length(); } } catch (IOException exc) { - viewer.releaseScreenImage(); if (exc != null) { Logger.error("IO Exception", exc); return exc.toString(); @@ -163,4 +133,67 @@ + " " + len + " " + fileName + (quality == Integer.MIN_VALUE ? "" : "; quality=" + quality)); } + + public Object getImageBytes(String type, int quality, String fileName, + OutputStream os) throws IOException { + byte[] bytes = null; + String errMsg = null; + boolean isOsTemp = (os == null && fileName != null); + boolean asBytes = (os == null && fileName == null); + Image image = viewer.getScreenImage(); + try { + if (image == null) { + errMsg = viewer.getErrorMessage(); + }else { + if (isOsTemp) + os = new FileOutputStream(fileName); + if (type.equalsIgnoreCase("JPEG") || type.equalsIgnoreCase("JPG")) { + if (quality <= 0) + quality = 75; + if (asBytes) + bytes = JpegEncoder.getBytes(image, quality); + else + JpegEncoder.write(image, quality, os); + } else if (type.equalsIgnoreCase("JPG64")) { + if (quality <= 0) + quality = 75; + bytes = JpegEncoder.getBytes(image, quality); + if (asBytes) + bytes = Base64.getBytes64(bytes); + else + Base64.write(bytes, os); + } else if (type.equalsIgnoreCase("PNG")) { + if (quality < 0) + quality = 2; + else if (quality > 9) + quality = 9; + if (asBytes) + bytes = PngEncoder.getBytes(image, quality); + else + PngEncoder.write(image, quality, os); + } else if (type.equalsIgnoreCase("PPM")) { + if (asBytes) + bytes = PpmEncoder.getBytes(image); + else + PpmEncoder.write(image, os); + } else if (type.equalsIgnoreCase("GIF")) { + if (asBytes) + bytes = GifEncoder.getBytes(image); + else + GifEncoder.write(image, os); + } + if (os != null) + os.flush(); + if (isOsTemp) + os.close(); + } + } catch (IOException e) { + viewer.releaseScreenImage(); + throw new IOException(e); + } + viewer.releaseScreenImage(); + if (errMsg != null) + return errMsg; + return bytes; + } } Modified: trunk/Jmol/src/org/jmol/export/image/ImageEncoder.java =================================================================== --- trunk/Jmol/src/org/jmol/export/image/ImageEncoder.java 2008-12-08 20:33:57 UTC (rev 10467) +++ trunk/Jmol/src/org/jmol/export/image/ImageEncoder.java 2008-12-09 04:37:32 UTC (rev 10468) @@ -64,6 +64,7 @@ private IOException iox; private static final ColorModel rgbModel = ColorModel.getRGBdefault(); + /// Constructor. // @param img The image to encode. // @param out The stream to write the bytes to. Modified: trunk/Jmol/src/org/jmol/export/image/PngEncoder.java =================================================================== --- trunk/Jmol/src/org/jmol/export/image/PngEncoder.java 2008-12-08 20:33:57 UTC (rev 10467) +++ trunk/Jmol/src/org/jmol/export/image/PngEncoder.java 2008-12-09 04:37:32 UTC (rev 10468) @@ -31,6 +31,7 @@ import java.util.zip.DeflaterOutputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.io.OutputStream; /** * PngEncoder takes a Java Image object and creates a byte string which can be saved as a PNG file. @@ -78,6 +79,15 @@ protected int bytesPerPixel; protected int compressionLevel; + public static void write(Image image, int quality, OutputStream os) throws IOException { + os.write(getBytes(image, quality)); + } + + public static byte[] getBytes(Image image, int quality) { + return (new PngEncoder(image, false, PngEncoder.FILTER_NONE, + quality)).pngEncode(); + } + /** * Class constructor * @@ -599,5 +609,6 @@ crcValue = crc.getValue(); bytePos = writeInt4((int) crcValue, bytePos); } + } Modified: trunk/Jmol/src/org/jmol/export/image/PpmEncoder.java =================================================================== --- trunk/Jmol/src/org/jmol/export/image/PpmEncoder.java 2008-12-08 20:33:57 UTC (rev 10467) +++ trunk/Jmol/src/org/jmol/export/image/PpmEncoder.java 2008-12-09 04:37:32 UTC (rev 10468) @@ -43,6 +43,23 @@ public class PpmEncoder extends ImageEncoder { + + public static byte[] getBytes(Image image) { + ByteArrayOutputStream os = new ByteArrayOutputStream(); + try { + write(image, os); + os.flush(); + os.close(); + } catch (IOException e) { + // ignore + } + return os.toByteArray(); + } + + public static void write(Image image, OutputStream os) throws IOException { + (new PpmEncoder(image, os)).encode(); + } + /// Constructor. // @param img The image to encode. // @param out The stream to write the PPM to. @@ -87,5 +104,4 @@ void encodeDone() throws IOException { // Nothing. } - } Modified: trunk/Jmol/src/org/jmol/util/Base64.java =================================================================== --- trunk/Jmol/src/org/jmol/util/Base64.java 2008-12-08 20:33:57 UTC (rev 10467) +++ trunk/Jmol/src/org/jmol/util/Base64.java 2008-12-09 04:37:32 UTC (rev 10468) @@ -14,6 +14,9 @@ package org.jmol.util; +import java.io.IOException; +import java.io.OutputStream; + public class Base64 { // 0 1 2 3 4 5 6 @@ -37,6 +40,20 @@ 41,42,43,44, 45,46,47,48, 49,50,51,0, 0,0,0,0, //0x70-0x7F }; + public static void write(byte[] bytes, OutputStream os) throws IOException { + StringBuffer sb = getBase64(bytes); + int len = sb.length(); + byte[] b = new byte[1]; + for (int i = 0; i < len; i++) { + b[0] = (byte) sb.charAt(i); + os.write(b); + } + } + + public static byte[] getBytes64(byte[] bytes) { + return toBytes(getBase64(bytes)); + } + public static StringBuffer getBase64(StringBuffer str) { return getBase64(toBytes(str)); } @@ -99,10 +116,11 @@ return bytes; } - public static byte[] toBytes(StringBuffer sb) { + private static byte[] toBytes(StringBuffer sb) { byte[] b = new byte[sb.length()]; for (int i = sb.length(); --i >= 0;) b[i] = (byte) sb.charAt(i); return b; - } + } + } \ No newline at end of file Modified: trunk/Jmol/src/org/jmol/util/JpegEncoder.java =================================================================== --- trunk/Jmol/src/org/jmol/util/JpegEncoder.java 2008-12-08 20:33:57 UTC (rev 10467) +++ trunk/Jmol/src/org/jmol/util/JpegEncoder.java 2008-12-09 04:37:32 UTC (rev 10468) @@ -83,6 +83,22 @@ Huf=new Huffman(JpegObj.imageWidth,JpegObj.imageHeight); } + public static byte[] getBytes(Image image, int quality) { + ByteArrayOutputStream os = new ByteArrayOutputStream(); + write(image, quality, os); + try { + os.flush(); + os.close(); + } catch (IOException e) { + // ignore + } + return os.toByteArray(); + } + + public static void write(Image image, int quality, OutputStream os) { + (new JpegEncoder(image, quality, os)).Compress(); + } + public void setQuality(int quality) { dct = new DCT(quality); } Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-12-08 20:33:57 UTC (rev 10467) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-12-09 04:37:32 UTC (rev 10468) @@ -3,6 +3,38 @@ version=11.7.18_dev +# new feature: (embedded application method of JmolViewer): +# +# Object viewer.getImageAs(String type, +# int quality, +# String filename, +# OutputStream outputStream); +# +# allows creation of an image of a given type ("JPG", "JPEG", "JPG64", "PNG", "GIF", "PPM") +# of a specific quality (-1 indicates default) +# 0 to 100 for JPG (-1 = default of 75) +# 0-9 for PNG (-1 = default of 2) +# and returned as byte[] (when fileName = null, os = null) +# or sent to an output stream (os != null) +# or set to a file (os == null, fileName != null) +# +# return can be String if there is an error. +# +# command sequence, for example: +# +# jmol.viewer.scriptWait("load =1crn;cartoons on;set antialiasdisplay"); +# jmol.viewer.getImageAs("JPG", 75, "t75.jpg", null); +# byte[] bytes = jmol.viewer.getImageAs("JPG", 75, "t75.jpg", null); +# +# note: You do have to use +# +# set antialiasDisplay +# +# to get precision drawing mode; this is not automatic, as for the write command +# +# primarily, this is for writing to an OutputStream directly, but +# the rest seemed simple to implement along with that. +# # ----------------------------------------------------------------------------- #version=11.7.17 Modified: trunk/Jmol/src/org/jmol/viewer/PropertyManager.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/PropertyManager.java 2008-12-08 20:33:57 UTC (rev 10467) +++ trunk/Jmol/src/org/jmol/viewer/PropertyManager.java 2008-12-09 04:37:32 UTC (rev 10468) @@ -369,7 +369,7 @@ case PROP_EVALUATE: return Eval.evaluateExpression(viewer, myParam.toString()); case PROP_IMAGE: - return viewer.getJpeg(75, returnType != null); + return viewer.getImageAs(returnType == null ? "JPEG" : "JPG64", -1, null, null); } String info = "getProperty ERROR\n" + infoType + "?\nOptions include:\n"; for (int i = 0; i < PROP_COUNT; i++) { Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Viewer.java 2008-12-08 20:33:57 UTC (rev 10467) +++ trunk/Jmol/src/org/jmol/viewer/Viewer.java 2008-12-09 04:37:32 UTC (rev 10468) @@ -37,17 +37,18 @@ import org.jmol.atomdata.AtomData; import org.jmol.atomdata.AtomDataServer; import org.jmol.g3d.*; +import org.jmol.util.Base64; import org.jmol.util.BitSetUtil; import org.jmol.util.CommandHistory; import org.jmol.util.Escape; +import org.jmol.util.JpegEncoder; import org.jmol.util.Logger; -import org.jmol.util.Base64; -import org.jmol.util.JpegEncoder; import org.jmol.util.Measure; +import org.jmol.util.Parser; import org.jmol.util.TempArray; import org.jmol.util.TextFormat; -import org.jmol.util.Parser; + import java.awt.Cursor; import java.awt.Graphics; import java.awt.Image; @@ -69,7 +70,8 @@ import javax.vecmath.AxisAngle4f; import java.net.URL; import java.io.BufferedInputStream; -import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.OutputStream; import java.io.Reader; //import java.io.Reader; import java.io.UnsupportedEncodingException; @@ -3414,23 +3416,45 @@ } /** + * @param type "PNG", "JPG", "JPEG", "JPG64", "PPM", "GIF" * @param quality - * @param asString + * @param fileName + * @param os * @return base64-encoded or binary version of the image */ - public Object getJpeg(int quality, boolean asString) { - byte[] jpeg = null; - Image eImage = getScreenImage(); - if (eImage != null) { - ByteArrayOutputStream os = new ByteArrayOutputStream(); - JpegEncoder jc = new JpegEncoder(eImage, quality, os); - jc.Compress(); - jpeg = os.toByteArray(); + public Object getImageAs(String type, int quality, String fileName, + OutputStream os) { + JmolImageCreatorInterface c = null; + Object bytes = null; + try { + c = (JmolImageCreatorInterface) Interface + .getOptionInterface("export.image.ImageCreator"); + } catch (Error er) { + // unsigned applet will not have this interface + // and thus will not use os or filename + if (Parser.isOneOf(type.toLowerCase(), "jpg;jpeg;jpg64")) { + Image eImage = getScreenImage(); + if (eImage != null) { + try { + bytes = JpegEncoder.getBytes(eImage, quality); + } catch (Throwable e) { + // + } + } + releaseScreenImage(); + if (type.toLowerCase().equals("jpg64")) + return (bytes == null ? "" : Base64.getBase64((byte[]) bytes) + .toString()); + return bytes; + } } - releaseScreenImage(); - if (asString) - return Base64.getBase64(jpeg).toString(); - return jpeg; + c.setViewer(this); + try { + bytes = c.getImageBytes(type, quality, fileName, os); + } catch (IOException e) { + //not possible here? + } + return bytes; } public void releaseScreenImage() { @@ -4288,7 +4312,7 @@ * that can be parsed more easily, involving the atoms and measurement * with units, for example: * - * [Si #3, O #8, Si #7, 60.1 ] + * [Si #3, O #8, Si #7, 60.1 <degrees mark>] * * Viewer.setStatusMeasuring * Measures.clear Modified: trunk/Jmol/src/org/openscience/jmol/app/Jmol.java =================================================================== --- trunk/Jmol/src/org/openscience/jmol/app/Jmol.java 2008-12-08 20:33:57 UTC (rev 10467) +++ trunk/Jmol/src/org/openscience/jmol/app/Jmol.java 2008-12-09 04:37:32 UTC (rev 10468) @@ -60,6 +60,8 @@ import org.apache.commons.cli.ParseException; import org.apache.commons.cli.HelpFormatter; +import java.io.FileOutputStream; + public class Jmol extends JPanel { /** @@ -651,6 +653,9 @@ jmol.viewer.openFileAsynchronously(modelFilename); } + //jmol.viewer.scriptWait("load 1crn.pdb;cartoons on;set antialiasdisplay"); + //jmol.viewer.getImageAs("JPG64", -1, "t75.jpg", null); + // OK, by now it is time to execute the script // file first if (scriptFilename != null) { @@ -1473,7 +1478,7 @@ sType = sType.substring(i + 1).toUpperCase(); } String msg = (sType.equals("PDF") ?createPdfDocument(new File(fileName)) - : createImageStatus(fileName, sType, null, sd.getQuality(sType))); + : createImageStatus(fileName, sType, (String) null, sd.getQuality(sType))); Logger.info(msg); } @@ -1581,12 +1586,12 @@ String createImageStatus(String fileName, String type, Object text_or_bytes, int quality) { ImageCreator c = new ImageCreator(viewer); - if (quality != Integer.MIN_VALUE - && (fileName == null || fileName.equalsIgnoreCase("CLIPBOARD"))) { - c.clipImage(null); - return "OK"; + if (fileName == null || fileName.equalsIgnoreCase("CLIPBOARD")) { + String text = (String) text_or_bytes; + c.clipImage(text); + return (text == null ? "OK" : "OK " + text.length()); } - String msg = c.createImage(fileName, type, text_or_bytes, quality); + String msg = (String) c.createImage(fileName, type, text_or_bytes, quality); if (msg == null || msg.startsWith("OK")) return msg; if (status != null) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |