propane 3.4.0-java → 3.7.0.pre-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (155) hide show
  1. checksums.yaml +4 -4
  2. data/.mvn/extensions.xml +1 -2
  3. data/.mvn/wrapper/MavenWrapperDownloader.java +2 -2
  4. data/.mvn/wrapper/maven-wrapper.properties +2 -2
  5. data/.travis.yml +2 -2
  6. data/CHANGELOG.md +12 -0
  7. data/Gemfile +2 -0
  8. data/README.md +17 -8
  9. data/Rakefile +10 -11
  10. data/bin/propane +3 -1
  11. data/lib/propane.rb +6 -4
  12. data/lib/propane/app.rb +20 -10
  13. data/lib/propane/creators/sketch_class.rb +7 -1
  14. data/lib/propane/creators/sketch_factory.rb +4 -2
  15. data/lib/propane/creators/sketch_writer.rb +1 -0
  16. data/lib/propane/helper_methods.rb +23 -24
  17. data/lib/propane/helpers/numeric.rb +2 -0
  18. data/lib/propane/helpers/version_error.rb +1 -0
  19. data/lib/propane/library.rb +5 -1
  20. data/lib/propane/library_loader.rb +2 -0
  21. data/lib/propane/native_folder.rb +10 -9
  22. data/lib/propane/native_loader.rb +3 -0
  23. data/lib/propane/runner.rb +14 -6
  24. data/lib/propane/version.rb +2 -1
  25. data/library/boids/boids.rb +21 -11
  26. data/library/color_group/color_group.rb +28 -0
  27. data/library/control_panel/control_panel.rb +8 -5
  28. data/library/dxf/dxf.rb +6 -0
  29. data/library/file_chooser/chooser.rb +10 -9
  30. data/library/file_chooser/file_chooser.rb +10 -9
  31. data/library/library_proxy/library_proxy.rb +2 -0
  32. data/library/net/net.rb +7 -0
  33. data/library/simplex_noise/simplex_noise.rb +2 -0
  34. data/library/slider/slider.rb +23 -22
  35. data/library/vector_utils/vector_utils.rb +4 -0
  36. data/library/video_event/video_event.rb +4 -1
  37. data/pom.rb +37 -36
  38. data/pom.xml +7 -7
  39. data/propane.gemspec +16 -12
  40. data/src/main/java/monkstone/ColorUtil.java +13 -1
  41. data/src/main/java/monkstone/MathToolModule.java +253 -203
  42. data/src/main/java/monkstone/PropaneLibrary.java +2 -2
  43. data/src/main/java/monkstone/fastmath/Deglut.java +1 -1
  44. data/src/main/java/monkstone/filechooser/Chooser.java +2 -1
  45. data/src/main/java/monkstone/noise/SimplexNoise.java +2 -2
  46. data/src/main/java/monkstone/slider/CustomHorizontalSlider.java +1 -1
  47. data/src/main/java/monkstone/slider/CustomVerticalSlider.java +1 -1
  48. data/src/main/java/monkstone/slider/SimpleHorizontalSlider.java +1 -1
  49. data/src/main/java/monkstone/slider/SimpleVerticalSlider.java +1 -1
  50. data/src/main/java/monkstone/slider/SliderBar.java +1 -1
  51. data/src/main/java/monkstone/slider/SliderGroup.java +1 -1
  52. data/src/main/java/monkstone/slider/WheelHandler.java +7 -6
  53. data/src/main/java/monkstone/vecmath/package-info.java +1 -1
  54. data/src/main/java/monkstone/vecmath/vec2/Vec2.java +1 -1
  55. data/src/main/java/monkstone/vecmath/vec3/Vec3.java +3 -3
  56. data/src/main/java/monkstone/videoevent/CaptureEvent.java +27 -0
  57. data/src/main/java/monkstone/videoevent/{VideoInterface.java → MovieEvent.java} +11 -27
  58. data/src/main/java/monkstone/videoevent/package-info.java +1 -1
  59. data/src/main/java/processing/awt/PGraphicsJava2D.java +781 -285
  60. data/src/main/java/processing/awt/PImageAWT.java +377 -0
  61. data/src/main/java/processing/awt/PShapeJava2D.java +56 -52
  62. data/src/main/java/processing/awt/PSurfaceAWT.java +309 -209
  63. data/src/main/java/processing/awt/ShimAWT.java +581 -0
  64. data/src/main/java/processing/core/PApplet.java +4510 -4503
  65. data/src/main/java/processing/core/PConstants.java +477 -447
  66. data/src/main/java/processing/core/PFont.java +914 -880
  67. data/src/main/java/processing/core/PGraphics.java +193 -177
  68. data/src/main/java/processing/core/PImage.java +611 -309
  69. data/src/main/java/processing/core/PMatrix.java +172 -159
  70. data/src/main/java/processing/core/PMatrix2D.java +478 -415
  71. data/src/main/java/processing/core/PMatrix3D.java +762 -735
  72. data/src/main/java/processing/core/PShape.java +2888 -2652
  73. data/src/main/java/processing/core/PShapeOBJ.java +97 -92
  74. data/src/main/java/processing/core/PShapeSVG.java +1705 -1490
  75. data/src/main/java/processing/core/PStyle.java +40 -37
  76. data/src/main/java/processing/core/PSurface.java +139 -97
  77. data/src/main/java/processing/core/PSurfaceNone.java +296 -218
  78. data/src/main/java/processing/core/PVector.java +997 -965
  79. data/src/main/java/processing/core/ThinkDifferent.java +15 -13
  80. data/src/main/java/processing/data/DoubleDict.java +756 -710
  81. data/src/main/java/processing/data/DoubleList.java +749 -696
  82. data/src/main/java/processing/data/FloatDict.java +748 -702
  83. data/src/main/java/processing/data/FloatList.java +751 -697
  84. data/src/main/java/processing/data/IntDict.java +720 -673
  85. data/src/main/java/processing/data/IntList.java +699 -633
  86. data/src/main/java/processing/data/JSONArray.java +931 -873
  87. data/src/main/java/processing/data/JSONObject.java +1262 -1165
  88. data/src/main/java/processing/data/JSONTokener.java +351 -341
  89. data/src/main/java/processing/data/LongDict.java +710 -663
  90. data/src/main/java/processing/data/LongList.java +701 -635
  91. data/src/main/java/processing/data/Sort.java +37 -41
  92. data/src/main/java/processing/data/StringDict.java +525 -486
  93. data/src/main/java/processing/data/StringList.java +626 -580
  94. data/src/main/java/processing/data/Table.java +3690 -3510
  95. data/src/main/java/processing/data/TableRow.java +182 -183
  96. data/src/main/java/processing/data/XML.java +957 -883
  97. data/src/main/java/processing/dxf/RawDXF.java +404 -0
  98. data/src/main/java/processing/event/Event.java +87 -67
  99. data/src/main/java/processing/event/KeyEvent.java +48 -41
  100. data/src/main/java/processing/event/MouseEvent.java +88 -113
  101. data/src/main/java/processing/event/TouchEvent.java +10 -6
  102. data/src/main/java/processing/javafx/PGraphicsFX2D.java +20 -345
  103. data/src/main/java/processing/javafx/PSurfaceFX.java +149 -121
  104. data/src/main/java/processing/net/Client.java +744 -0
  105. data/src/main/java/processing/net/Server.java +388 -0
  106. data/src/main/java/processing/opengl/FontTexture.java +289 -270
  107. data/src/main/java/processing/opengl/FrameBuffer.java +386 -364
  108. data/src/main/java/processing/opengl/LinePath.java +547 -500
  109. data/src/main/java/processing/opengl/LineStroker.java +588 -581
  110. data/src/main/java/processing/opengl/PGL.java +3047 -2914
  111. data/src/main/java/processing/opengl/PGraphics2D.java +408 -315
  112. data/src/main/java/processing/opengl/PGraphics3D.java +107 -72
  113. data/src/main/java/processing/opengl/PGraphicsOpenGL.java +12378 -12075
  114. data/src/main/java/processing/opengl/PJOGL.java +1753 -1670
  115. data/src/main/java/processing/opengl/PShader.java +1266 -1257
  116. data/src/main/java/processing/opengl/PShapeOpenGL.java +4678 -4580
  117. data/src/main/java/processing/opengl/PSurfaceJOGL.java +1114 -1027
  118. data/src/main/java/processing/opengl/Texture.java +1492 -1401
  119. data/src/main/java/processing/opengl/VertexBuffer.java +57 -55
  120. data/test/create_test.rb +21 -20
  121. data/test/deglut_spec_test.rb +4 -2
  122. data/test/helper_methods_test.rb +49 -20
  123. data/test/math_tool_test.rb +39 -32
  124. data/test/native_folder.rb +47 -0
  125. data/test/respond_to_test.rb +3 -2
  126. data/test/sketches/key_event.rb +2 -2
  127. data/test/sketches/library/my_library/my_library.rb +3 -0
  128. data/test/test_helper.rb +2 -0
  129. data/test/vecmath_spec_test.rb +35 -22
  130. data/vendors/Rakefile +33 -62
  131. metadata +56 -48
  132. data/src/main/java/processing/core/util/image/ImageLoadFacade.java +0 -161
  133. data/src/main/java/processing/core/util/image/ImageSaveFacade.java +0 -169
  134. data/src/main/java/processing/core/util/image/constants/TifConstants.java +0 -45
  135. data/src/main/java/processing/core/util/image/load/AwtImageLoadStrategy.java +0 -80
  136. data/src/main/java/processing/core/util/image/load/Base64StringImageLoadStrategy.java +0 -73
  137. data/src/main/java/processing/core/util/image/load/FallbackImageLoadStrategy.java +0 -70
  138. data/src/main/java/processing/core/util/image/load/ImageIoImageLoadStrategy.java +0 -132
  139. data/src/main/java/processing/core/util/image/load/ImageLoadStrategy.java +0 -48
  140. data/src/main/java/processing/core/util/image/load/ImageLoadUtil.java +0 -45
  141. data/src/main/java/processing/core/util/image/load/TgaImageLoadStrategy.java +0 -255
  142. data/src/main/java/processing/core/util/image/load/TiffImageLoadStrategy.java +0 -98
  143. data/src/main/java/processing/core/util/image/save/ImageSaveStrategy.java +0 -49
  144. data/src/main/java/processing/core/util/image/save/ImageSaveUtil.java +0 -48
  145. data/src/main/java/processing/core/util/image/save/ImageWriterImageSaveStrategy.java +0 -179
  146. data/src/main/java/processing/core/util/image/save/SaveImageException.java +0 -41
  147. data/src/main/java/processing/core/util/image/save/TgaImageSaveStrategy.java +0 -198
  148. data/src/main/java/processing/core/util/image/save/TiffImageSaveStrategy.java +0 -91
  149. data/src/main/java/processing/core/util/image/save/TiffNakedFilenameImageSaveStrategy.java +0 -57
  150. data/src/main/java/processing/core/util/io/InputFactory.java +0 -285
  151. data/src/main/java/processing/core/util/io/PathUtil.java +0 -109
  152. data/src/main/java/processing/opengl/shaders/LightVert-brcm.glsl +0 -154
  153. data/src/main/java/processing/opengl/shaders/LightVert-vc4.glsl +0 -154
  154. data/src/main/java/processing/opengl/shaders/TexLightVert-brcm.glsl +0 -160
  155. data/src/main/java/processing/opengl/shaders/TexLightVert-vc4.glsl +0 -160
@@ -1,98 +0,0 @@
1
- /* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */
2
-
3
- /*
4
- Part of the Processing project - http://processing.org
5
-
6
- Copyright (c) 2012-18 The Processing Foundation
7
- Copyright (c) 2004-12 Ben Fry and Casey Reas
8
- Copyright (c) 2001-04 Massachusetts Institute of Technology
9
-
10
- This library is free software; you can redistribute it and/or
11
- modify it under the terms of the GNU Lesser General Public
12
- License as published by the Free Software Foundation, version 2.1.
13
-
14
- This library is distributed in the hope that it will be useful,
15
- but WITHOUT ANY WARRANTY; without even the implied warranty of
16
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17
- Lesser General Public License for more details.
18
-
19
- You should have received a copy of the GNU Lesser General
20
- Public License along with this library; if not, write to the
21
- Free Software Foundation, Inc., 59 Temple Place, Suite 330,
22
- Boston, MA 02111-1307 USA
23
- */
24
-
25
- package processing.core.util.image.load;
26
-
27
- import processing.core.PApplet;
28
- import processing.core.PConstants;
29
- import processing.core.PImage;
30
- import processing.core.util.image.constants.TifConstants;
31
-
32
-
33
- /**
34
- * Strategy for loading a tif image.
35
- */
36
- public class TiffImageLoadStrategy implements ImageLoadStrategy {
37
-
38
- @Override
39
- public PImage load(PApplet pApplet, String path, String extension) {
40
- byte bytes[] = pApplet.loadBytes(path);
41
- PImage image = (bytes == null) ? null : loadFromBytes(bytes);
42
- return image;
43
- }
44
-
45
- /**
46
- * Load the tif image from bytes.
47
- *
48
- * @param tiff The bytes of the tif image.
49
- * @return PImage created from the provided bytes.
50
- */
51
- private PImage loadFromBytes(byte[] tiff) {
52
- if ((tiff[42] != tiff[102]) || // width/height in both places
53
- (tiff[43] != tiff[103])) {
54
- System.err.println(TifConstants.TIFF_ERROR);
55
- return null;
56
- }
57
-
58
- int width =
59
- ((tiff[30] & 0xff) << 8) | (tiff[31] & 0xff);
60
- int height =
61
- ((tiff[42] & 0xff) << 8) | (tiff[43] & 0xff);
62
-
63
- int count =
64
- ((tiff[114] & 0xff) << 24) |
65
- ((tiff[115] & 0xff) << 16) |
66
- ((tiff[116] & 0xff) << 8) |
67
- (tiff[117] & 0xff);
68
- if (count != width * height * 3) {
69
- System.err.println(TifConstants.TIFF_ERROR + " (" + width + ", " + height +")");
70
- return null;
71
- }
72
-
73
- // check the rest of the header
74
- for (int i = 0; i < TifConstants.TIFF_HEADER.length; i++) {
75
- if ((i == 30) || (i == 31) || (i == 42) || (i == 43) ||
76
- (i == 102) || (i == 103) ||
77
- (i == 114) || (i == 115) || (i == 116) || (i == 117)) continue;
78
-
79
- if (tiff[i] != TifConstants.TIFF_HEADER[i]) {
80
- System.err.println(TifConstants.TIFF_ERROR + " (" + i + ")");
81
- return null;
82
- }
83
- }
84
-
85
- PImage outgoing = new PImage(width, height, PConstants.RGB);
86
- int index = 768;
87
- count /= 3;
88
- for (int i = 0; i < count; i++) {
89
- outgoing.pixels[i] =
90
- 0xFF000000 |
91
- (tiff[index++] & 0xff) << 16 |
92
- (tiff[index++] & 0xff) << 8 |
93
- (tiff[index++] & 0xff);
94
- }
95
- return outgoing;
96
- }
97
-
98
- }
@@ -1,49 +0,0 @@
1
- /* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */
2
-
3
- /*
4
- Part of the Processing project - http://processing.org
5
-
6
- Copyright (c) 2012-18 The Processing Foundation
7
- Copyright (c) 2004-12 Ben Fry and Casey Reas
8
- Copyright (c) 2001-04 Massachusetts Institute of Technology
9
-
10
- This library is free software; you can redistribute it and/or
11
- modify it under the terms of the GNU Lesser General Public
12
- License as published by the Free Software Foundation, version 2.1.
13
-
14
- This library is distributed in the hope that it will be useful,
15
- but WITHOUT ANY WARRANTY; without even the implied warranty of
16
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17
- Lesser General Public License for more details.
18
-
19
- You should have received a copy of the GNU Lesser General
20
- Public License along with this library; if not, write to the
21
- Free Software Foundation, Inc., 59 Temple Place, Suite 330,
22
- Boston, MA 02111-1307 USA
23
- */
24
-
25
- package processing.core.util.image.save;
26
-
27
- import java.io.IOException;
28
-
29
-
30
- /**
31
- * Interface for strategies that can save images to different formats or via different methods.
32
- */
33
- public interface ImageSaveStrategy {
34
-
35
- /**
36
- * Save an image.
37
- *
38
- * @param pixels The raw pixel values (described by format) to be saved.
39
- * @param pixelWidth The width of the image in pixels.
40
- * @param pixelHeight The height of the image in pixels.
41
- * @param format The format as described in PConstants like PConstants.RGB.
42
- * @param filename The path to which the image should be written.
43
- * @return True if writting succeeded and false otherwise.
44
- * @throws IOException Thrown if the file writing encountered an unexpected error.
45
- */
46
- boolean save(int[] pixels, int pixelWidth, int pixelHeight, int format,
47
- String filename) throws IOException;
48
-
49
- }
@@ -1,48 +0,0 @@
1
- /* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */
2
-
3
- /*
4
- Part of the Processing project - http://processing.org
5
-
6
- Copyright (c) 2012-18 The Processing Foundation
7
- Copyright (c) 2004-12 Ben Fry and Casey Reas
8
- Copyright (c) 2001-04 Massachusetts Institute of Technology
9
-
10
- This library is free software; you can redistribute it and/or
11
- modify it under the terms of the GNU Lesser General Public
12
- License as published by the Free Software Foundation, version 2.1.
13
-
14
- This library is distributed in the hope that it will be useful,
15
- but WITHOUT ANY WARRANTY; without even the implied warranty of
16
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17
- Lesser General Public License for more details.
18
-
19
- You should have received a copy of the GNU Lesser General
20
- Public License along with this library; if not, write to the
21
- Free Software Foundation, Inc., 59 Temple Place, Suite 330,
22
- Boston, MA 02111-1307 USA
23
- */
24
-
25
- package processing.core.util.image.save;
26
-
27
- import java.io.BufferedOutputStream;
28
- import java.io.FileNotFoundException;
29
- import java.io.FileOutputStream;
30
- import java.io.OutputStream;
31
-
32
-
33
- /**
34
- * Common convenience functions for file saving.
35
- */
36
- public class ImageSaveUtil {
37
-
38
- /**
39
- * Create an output stream for a file.
40
- *
41
- * @param filename The filename at which the output stream should be created.
42
- * @return The newly created output stream.
43
- */
44
- public static OutputStream createForFile(String filename) throws FileNotFoundException {
45
- return new BufferedOutputStream(new FileOutputStream(filename), 32768);
46
- }
47
-
48
- }
@@ -1,179 +0,0 @@
1
- /* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */
2
-
3
- /*
4
- Part of the Processing project - http://processing.org
5
-
6
- Copyright (c) 2012-18 The Processing Foundation
7
- Copyright (c) 2004-12 Ben Fry and Casey Reas
8
- Copyright (c) 2001-04 Massachusetts Institute of Technology
9
-
10
- This library is free software; you can redistribute it and/or
11
- modify it under the terms of the GNU Lesser General Public
12
- License as published by the Free Software Foundation, version 2.1.
13
-
14
- This library is distributed in the hope that it will be useful,
15
- but WITHOUT ANY WARRANTY; without even the implied warranty of
16
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17
- Lesser General Public License for more details.
18
-
19
- You should have received a copy of the GNU Lesser General
20
- Public License along with this library; if not, write to the
21
- Free Software Foundation, Inc., 59 Temple Place, Suite 330,
22
- Boston, MA 02111-1307 USA
23
- */
24
-
25
- package processing.core.util.image.save;
26
-
27
- import processing.core.PApplet;
28
- import processing.core.PConstants;
29
- import processing.core.util.io.PathUtil;
30
-
31
- import javax.imageio.*;
32
- import javax.imageio.metadata.IIOInvalidTreeException;
33
- import javax.imageio.metadata.IIOMetadata;
34
- import javax.imageio.metadata.IIOMetadataNode;
35
- import java.awt.image.BufferedImage;
36
- import java.io.BufferedOutputStream;
37
- import java.io.File;
38
- import java.io.IOException;
39
- import java.util.Iterator;
40
-
41
-
42
- /**
43
- * Strategy to use ImageIO functions to save an image.
44
- */
45
- public class ImageWriterImageSaveStrategy implements ImageSaveStrategy {
46
-
47
- /**
48
- * Use ImageIO functions from Java 1.4 and later to handle image save.
49
- * Various formats are supported, typically jpeg, png, bmp, and wbmp.
50
- * To get a list of the supported formats for writing, use: <BR>
51
- * <TT>println(javax.imageio.ImageIO.getReaderFormatNames())</TT>
52
- */
53
- @Override
54
- public boolean save(int[] pixels, int pixelWidth, int pixelHeight, int format,
55
- String path) throws IOException {
56
-
57
- try {
58
- int outputFormat = (format == PConstants.ARGB) ?
59
- BufferedImage.TYPE_INT_ARGB : BufferedImage.TYPE_INT_RGB;
60
-
61
- String extension = PathUtil.cleanExtension(
62
- PathUtil.parseExtension(path)
63
- );
64
-
65
- // JPEG and BMP images that have an alpha channel set get pretty unhappy.
66
- // BMP just doesn't write, and JPEG writes it as a CMYK image.
67
- // http://code.google.com/p/processing/issues/detail?id=415
68
- if (isRgbImage(extension)) {
69
- outputFormat = BufferedImage.TYPE_INT_RGB;
70
- }
71
-
72
- BufferedImage bimage = new BufferedImage(pixelWidth, pixelHeight, outputFormat);
73
- bimage.setRGB(0, 0, pixelWidth, pixelHeight, pixels, 0, pixelWidth);
74
-
75
- File file = new File(path);
76
-
77
- ImageWriter writer = null;
78
- ImageWriteParam param = null;
79
- IIOMetadata metadata = null;
80
-
81
- if (isJpeg(extension)) {
82
- if ((writer = getImageIoWriter("jpeg")) != null) {
83
- // Set JPEG quality to 90% with baseline optimization. Setting this
84
- // to 1 was a huge jump (about triple the size), so this seems good.
85
- // Oddly, a smaller file size than Photoshop at 90%, but I suppose
86
- // it's a completely different algorithm.
87
- param = writer.getDefaultWriteParam();
88
- param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
89
- param.setCompressionQuality(0.9f);
90
- }
91
- }
92
-
93
- if (isPng(extension)) {
94
- if ((writer = getImageIoWriter("png")) != null) {
95
- param = writer.getDefaultWriteParam();
96
- if (false) {
97
- metadata = getImageIoDpi(writer, param, 100);
98
- }
99
- }
100
- }
101
-
102
- if (writer != null) {
103
- BufferedOutputStream output =
104
- new BufferedOutputStream(PApplet.createOutput(file));
105
- writer.setOutput(ImageIO.createImageOutputStream(output));
106
- // writer.write(null, new IIOImage(bimage, null, null), param);
107
- writer.write(metadata, new IIOImage(bimage, null, metadata), param);
108
- writer.dispose();
109
-
110
- output.flush();
111
- output.close();
112
- return true;
113
- }
114
- // If iter.hasNext() somehow fails up top, it falls through to here
115
- return javax.imageio.ImageIO.write(bimage, extension, file);
116
-
117
- } catch (Exception e) {
118
- e.printStackTrace();
119
- throw new IOException("image save failed.");
120
- }
121
- }
122
-
123
- private ImageWriter getImageIoWriter(String extension) {
124
- Iterator<ImageWriter> iter = ImageIO.getImageWritersByFormatName(extension);
125
- if (iter.hasNext()) {
126
- return iter.next();
127
- }
128
- return null;
129
- }
130
-
131
- private IIOMetadata getImageIoDpi(ImageWriter writer, ImageWriteParam param, double dpi) {
132
- // http://stackoverflow.com/questions/321736/how-to-set-dpi-information-in-an-image
133
- ImageTypeSpecifier typeSpecifier =
134
- ImageTypeSpecifier.createFromBufferedImageType(BufferedImage.TYPE_INT_RGB);
135
- IIOMetadata metadata =
136
- writer.getDefaultImageMetadata(typeSpecifier, param);
137
-
138
- if (!metadata.isReadOnly() && metadata.isStandardMetadataFormatSupported()) {
139
- // for PNG, it's dots per millimeter
140
- double dotsPerMilli = dpi / 25.4;
141
-
142
- IIOMetadataNode horiz = new IIOMetadataNode("HorizontalPixelSize");
143
- horiz.setAttribute("value", Double.toString(dotsPerMilli));
144
-
145
- IIOMetadataNode vert = new IIOMetadataNode("VerticalPixelSize");
146
- vert.setAttribute("value", Double.toString(dotsPerMilli));
147
-
148
- IIOMetadataNode dim = new IIOMetadataNode("Dimension");
149
- dim.appendChild(horiz);
150
- dim.appendChild(vert);
151
-
152
- IIOMetadataNode root = new IIOMetadataNode("javax_imageio_1.0");
153
- root.appendChild(dim);
154
-
155
- try {
156
- metadata.mergeTree("javax_imageio_1.0", root);
157
- return metadata;
158
-
159
- } catch (IIOInvalidTreeException e) {
160
- System.err.println("Could not set the DPI of the output image");
161
- e.printStackTrace();
162
- }
163
- }
164
- return null;
165
- }
166
-
167
- private boolean isRgbImage(String extension) {
168
- return extension.equals("bmp") || isJpeg(extension);
169
- }
170
-
171
- private boolean isJpeg(String extension) {
172
- return extension.equals("jpg") || extension.equals("jpeg");
173
- }
174
-
175
- private boolean isPng(String extension) {
176
- return extension.equals("png");
177
- }
178
-
179
- }
@@ -1,41 +0,0 @@
1
- /* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */
2
-
3
- /*
4
- Part of the Processing project - http://processing.org
5
-
6
- Copyright (c) 2012-18 The Processing Foundation
7
- Copyright (c) 2004-12 Ben Fry and Casey Reas
8
- Copyright (c) 2001-04 Massachusetts Institute of Technology
9
-
10
- This library is free software; you can redistribute it and/or
11
- modify it under the terms of the GNU Lesser General Public
12
- License as published by the Free Software Foundation, version 2.1.
13
-
14
- This library is distributed in the hope that it will be useful,
15
- but WITHOUT ANY WARRANTY; without even the implied warranty of
16
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17
- Lesser General Public License for more details.
18
-
19
- You should have received a copy of the GNU Lesser General
20
- Public License along with this library; if not, write to the
21
- Free Software Foundation, Inc., 59 Temple Place, Suite 330,
22
- Boston, MA 02111-1307 USA
23
- */
24
-
25
- package processing.core.util.image.save;
26
-
27
-
28
- /**
29
- * Exception describing an issue encountered while saving an image.
30
- */
31
- public class SaveImageException extends RuntimeException {
32
-
33
- /**
34
- * Create a new exception with a description of why image saving failed.
35
- * @param msg The message describing failure cause.
36
- */
37
- public SaveImageException(String msg) {
38
- super(msg);
39
- }
40
-
41
- }
@@ -1,198 +0,0 @@
1
- /* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */
2
-
3
- /*
4
- Part of the Processing project - http://processing.org
5
-
6
- Copyright (c) 2012-18 The Processing Foundation
7
- Copyright (c) 2004-12 Ben Fry and Casey Reas
8
- Copyright (c) 2001-04 Massachusetts Institute of Technology
9
-
10
- This library is free software; you can redistribute it and/or
11
- modify it under the terms of the GNU Lesser General Public
12
- License as published by the Free Software Foundation, version 2.1.
13
-
14
- This library is distributed in the hope that it will be useful,
15
- but WITHOUT ANY WARRANTY; without even the implied warranty of
16
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17
- Lesser General Public License for more details.
18
-
19
- You should have received a copy of the GNU Lesser General
20
- Public License along with this library; if not, write to the
21
- Free Software Foundation, Inc., 59 Temple Place, Suite 330,
22
- Boston, MA 02111-1307 USA
23
- */
24
-
25
- package processing.core.util.image.save;
26
-
27
- import processing.core.PConstants;
28
-
29
- import java.io.FileNotFoundException;
30
- import java.io.IOException;
31
- import java.io.OutputStream;
32
-
33
-
34
- /**
35
- * Strategy for creating tga (targa32) images.
36
- */
37
- public class TgaImageSaveStrategy implements ImageSaveStrategy {
38
-
39
- /**
40
- * Creates a Targa32 formatted byte sequence of specified
41
- * pixel buffer using RLE compression.
42
- * </p>
43
- * Also figured out how to avoid parsing the image upside-down
44
- * (there's a header flag to set the image origin to top-left)
45
- * </p>
46
- * Starting with revision 0092, the format setting is taken into account:
47
- * <UL>
48
- * <LI><TT>ALPHA</TT> images written as 8bit grayscale (uses lowest byte)
49
- * <LI><TT>RGB</TT> &rarr; 24 bits
50
- * <LI><TT>ARGB</TT> &rarr; 32 bits
51
- * </UL>
52
- * All versions are RLE compressed.
53
- * </p>
54
- * Contributed by toxi 8-10 May 2005, based on this RLE
55
- * <A HREF="http://www.wotsit.org/download.asp?f=tga">specification</A>
56
- */
57
- @Override
58
- public boolean save(int[] pixels, int pixelWidth, int pixelHeight, int format,
59
- String filename) throws FileNotFoundException {
60
-
61
- OutputStream output = ImageSaveUtil.createForFile(filename);
62
-
63
- byte header[] = new byte[18];
64
-
65
- if (format == PConstants.ALPHA) { // save ALPHA images as 8bit grayscale
66
- header[2] = 0x0B;
67
- header[16] = 0x08;
68
- header[17] = 0x28;
69
-
70
- } else if (format == PConstants.RGB) {
71
- header[2] = 0x0A;
72
- header[16] = 24;
73
- header[17] = 0x20;
74
-
75
- } else if (format == PConstants.ARGB) {
76
- header[2] = 0x0A;
77
- header[16] = 32;
78
- header[17] = 0x28;
79
-
80
- } else {
81
- throw new RuntimeException("Image format not recognized inside save()");
82
- }
83
- // set image dimensions lo-hi byte order
84
- header[12] = (byte) (pixelWidth & 0xff);
85
- header[13] = (byte) (pixelWidth >> 8);
86
- header[14] = (byte) (pixelHeight & 0xff);
87
- header[15] = (byte) (pixelHeight >> 8);
88
-
89
- try {
90
- output.write(header);
91
-
92
- int maxLen = pixelHeight * pixelWidth;
93
- int index = 0;
94
- int col; //, prevCol;
95
- int[] currChunk = new int[128];
96
-
97
- // 8bit image exporter is in separate loop
98
- // to avoid excessive conditionals...
99
- if (format == PConstants.ALPHA) {
100
- while (index < maxLen) {
101
- boolean isRLE = false;
102
- int rle = 1;
103
- currChunk[0] = col = pixels[index] & 0xff;
104
- while (index + rle < maxLen) {
105
- if (col != (pixels[index + rle]&0xff) || rle == 128) {
106
- isRLE = (rle > 1);
107
- break;
108
- }
109
- rle++;
110
- }
111
- if (isRLE) {
112
- output.write(0x80 | (rle - 1));
113
- output.write(col);
114
-
115
- } else {
116
- rle = 1;
117
- while (index + rle < maxLen) {
118
- int cscan = pixels[index + rle] & 0xff;
119
- if ((col != cscan && rle < 128) || rle < 3) {
120
- currChunk[rle] = col = cscan;
121
- } else {
122
- if (col == cscan) rle -= 2;
123
- break;
124
- }
125
- rle++;
126
- }
127
- output.write(rle - 1);
128
- for (int i = 0; i < rle; i++) output.write(currChunk[i]);
129
- }
130
- index += rle;
131
- }
132
- } else { // export 24/32 bit TARGA
133
- while (index < maxLen) {
134
- boolean isRLE = false;
135
- currChunk[0] = col = pixels[index];
136
- int rle = 1;
137
- // try to find repeating bytes (min. len = 2 pixels)
138
- // maximum chunk size is 128 pixels
139
- while (index + rle < maxLen) {
140
- if (col != pixels[index + rle] || rle == 128) {
141
- isRLE = (rle > 1); // set flag for RLE chunk
142
- break;
143
- }
144
- rle++;
145
- }
146
- if (isRLE) {
147
- output.write(128 | (rle - 1));
148
- output.write(col & 0xff);
149
- output.write(col >> 8 & 0xff);
150
- output.write(col >> 16 & 0xff);
151
- if (format == PConstants.ARGB) output.write(col >>> 24 & 0xff);
152
-
153
- } else { // not RLE
154
- rle = 1;
155
- while (index + rle < maxLen) {
156
- if ((col != pixels[index + rle] && rle < 128) || rle < 3) {
157
- currChunk[rle] = col = pixels[index + rle];
158
- } else {
159
- // check if the exit condition was the start of
160
- // a repeating colour
161
- if (col == pixels[index + rle]) rle -= 2;
162
- break;
163
- }
164
- rle++;
165
- }
166
- // write uncompressed chunk
167
- output.write(rle - 1);
168
- if (format == PConstants.ARGB) {
169
- for (int i = 0; i < rle; i++) {
170
- col = currChunk[i];
171
- output.write(col & 0xff);
172
- output.write(col >> 8 & 0xff);
173
- output.write(col >> 16 & 0xff);
174
- output.write(col >>> 24 & 0xff);
175
- }
176
- } else {
177
- for (int i = 0; i < rle; i++) {
178
- col = currChunk[i];
179
- output.write(col & 0xff);
180
- output.write(col >> 8 & 0xff);
181
- output.write(col >> 16 & 0xff);
182
- }
183
- }
184
- }
185
- index += rle;
186
- }
187
- }
188
- output.flush();
189
- output.close();
190
- return true;
191
-
192
- } catch (IOException e) {
193
- e.printStackTrace();
194
- return false;
195
- }
196
- }
197
-
198
- }