propane 3.3.1-java → 3.6.0-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 (157) hide show
  1. checksums.yaml +4 -4
  2. data/.mvn/extensions.xml +1 -2
  3. data/.mvn/wrapper/MavenWrapperDownloader.java +117 -0
  4. data/.mvn/wrapper/maven-wrapper.properties +2 -3
  5. data/.travis.yml +9 -0
  6. data/CHANGELOG.md +17 -5
  7. data/Gemfile +2 -0
  8. data/README.md +17 -8
  9. data/Rakefile +16 -30
  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 +21 -15
  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/mvnw +127 -51
  38. data/mvnw.cmd +182 -145
  39. data/pom.rb +53 -50
  40. data/pom.xml +17 -8
  41. data/propane.gemspec +13 -11
  42. data/src/main/java/monkstone/ColorUtil.java +13 -1
  43. data/src/main/java/monkstone/MathToolModule.java +253 -203
  44. data/src/main/java/monkstone/PropaneLibrary.java +2 -2
  45. data/src/main/java/monkstone/fastmath/Deglut.java +1 -1
  46. data/src/main/java/monkstone/filechooser/Chooser.java +2 -1
  47. data/src/main/java/monkstone/noise/SimplexNoise.java +2 -2
  48. data/src/main/java/monkstone/slider/CustomHorizontalSlider.java +1 -1
  49. data/src/main/java/monkstone/slider/CustomVerticalSlider.java +1 -1
  50. data/src/main/java/monkstone/slider/SimpleHorizontalSlider.java +1 -1
  51. data/src/main/java/monkstone/slider/SimpleVerticalSlider.java +1 -1
  52. data/src/main/java/monkstone/slider/SliderBar.java +1 -1
  53. data/src/main/java/monkstone/slider/SliderGroup.java +1 -1
  54. data/src/main/java/monkstone/slider/WheelHandler.java +7 -6
  55. data/src/main/java/monkstone/vecmath/package-info.java +1 -1
  56. data/src/main/java/monkstone/vecmath/vec2/Vec2.java +2 -2
  57. data/src/main/java/monkstone/vecmath/vec3/Vec3.java +1 -1
  58. data/src/main/java/monkstone/videoevent/CaptureEvent.java +27 -0
  59. data/src/main/java/monkstone/videoevent/{VideoInterface.java → MovieEvent.java} +11 -27
  60. data/src/main/java/monkstone/videoevent/package-info.java +1 -1
  61. data/src/main/java/processing/awt/PGraphicsJava2D.java +2164 -1661
  62. data/src/main/java/processing/awt/PImageAWT.java +377 -0
  63. data/src/main/java/processing/awt/PShapeJava2D.java +280 -268
  64. data/src/main/java/processing/awt/PSurfaceAWT.java +942 -829
  65. data/src/main/java/processing/awt/ShimAWT.java +581 -0
  66. data/src/main/java/processing/core/PApplet.java +831 -824
  67. data/src/main/java/processing/core/PConstants.java +477 -447
  68. data/src/main/java/processing/core/PFont.java +914 -880
  69. data/src/main/java/processing/core/PGraphics.java +229 -213
  70. data/src/main/java/processing/core/PImage.java +620 -318
  71. data/src/main/java/processing/core/PMatrix.java +172 -159
  72. data/src/main/java/processing/core/PMatrix2D.java +478 -409
  73. data/src/main/java/processing/core/PMatrix3D.java +762 -735
  74. data/src/main/java/processing/core/PShape.java +2888 -2652
  75. data/src/main/java/processing/core/PShapeOBJ.java +436 -415
  76. data/src/main/java/processing/core/PShapeSVG.java +1702 -1479
  77. data/src/main/java/processing/core/PStyle.java +40 -37
  78. data/src/main/java/processing/core/PSurface.java +139 -97
  79. data/src/main/java/processing/core/PSurfaceNone.java +296 -208
  80. data/src/main/java/processing/core/PVector.java +997 -965
  81. data/src/main/java/processing/core/ThinkDifferent.java +12 -17
  82. data/src/main/java/processing/data/DoubleDict.java +756 -710
  83. data/src/main/java/processing/data/DoubleList.java +749 -696
  84. data/src/main/java/processing/data/FloatDict.java +748 -702
  85. data/src/main/java/processing/data/FloatList.java +751 -697
  86. data/src/main/java/processing/data/IntDict.java +720 -673
  87. data/src/main/java/processing/data/IntList.java +699 -633
  88. data/src/main/java/processing/data/JSONArray.java +931 -873
  89. data/src/main/java/processing/data/JSONObject.java +1262 -1165
  90. data/src/main/java/processing/data/JSONTokener.java +351 -341
  91. data/src/main/java/processing/data/LongDict.java +710 -663
  92. data/src/main/java/processing/data/LongList.java +701 -635
  93. data/src/main/java/processing/data/Sort.java +37 -41
  94. data/src/main/java/processing/data/StringDict.java +525 -486
  95. data/src/main/java/processing/data/StringList.java +626 -580
  96. data/src/main/java/processing/data/Table.java +3690 -3510
  97. data/src/main/java/processing/data/TableRow.java +182 -183
  98. data/src/main/java/processing/data/XML.java +957 -883
  99. data/src/main/java/processing/dxf/RawDXF.java +404 -0
  100. data/src/main/java/processing/event/Event.java +87 -66
  101. data/src/main/java/processing/event/KeyEvent.java +48 -41
  102. data/src/main/java/processing/event/MouseEvent.java +88 -113
  103. data/src/main/java/processing/event/TouchEvent.java +10 -6
  104. data/src/main/java/processing/javafx/PGraphicsFX2D.java +20 -345
  105. data/src/main/java/processing/javafx/PSurfaceFX.java +149 -121
  106. data/src/main/java/processing/net/Client.java +744 -0
  107. data/src/main/java/processing/net/Server.java +388 -0
  108. data/src/main/java/processing/opengl/FontTexture.java +289 -270
  109. data/src/main/java/processing/opengl/FrameBuffer.java +386 -364
  110. data/src/main/java/processing/opengl/LinePath.java +547 -500
  111. data/src/main/java/processing/opengl/LineStroker.java +588 -581
  112. data/src/main/java/processing/opengl/PGL.java +3047 -2914
  113. data/src/main/java/processing/opengl/PGraphics2D.java +408 -315
  114. data/src/main/java/processing/opengl/PGraphics3D.java +107 -72
  115. data/src/main/java/processing/opengl/PGraphicsOpenGL.java +12378 -12075
  116. data/src/main/java/processing/opengl/PJOGL.java +1753 -1670
  117. data/src/main/java/processing/opengl/PShader.java +1266 -1257
  118. data/src/main/java/processing/opengl/PShapeOpenGL.java +4678 -4580
  119. data/src/main/java/processing/opengl/PSurfaceJOGL.java +1114 -1027
  120. data/src/main/java/processing/opengl/Texture.java +1492 -1401
  121. data/src/main/java/processing/opengl/VertexBuffer.java +57 -55
  122. data/test/create_test.rb +21 -20
  123. data/test/deglut_spec_test.rb +4 -2
  124. data/test/helper_methods_test.rb +49 -20
  125. data/test/math_tool_test.rb +39 -32
  126. data/test/native_folder.rb +47 -0
  127. data/test/respond_to_test.rb +3 -2
  128. data/test/sketches/key_event.rb +2 -2
  129. data/test/sketches/library/my_library/my_library.rb +3 -0
  130. data/test/test_helper.rb +2 -0
  131. data/test/vecmath_spec_test.rb +35 -22
  132. data/vendors/Rakefile +33 -62
  133. metadata +54 -45
  134. data/src/main/java/processing/core/util/image/ImageLoadFacade.java +0 -161
  135. data/src/main/java/processing/core/util/image/ImageSaveFacade.java +0 -169
  136. data/src/main/java/processing/core/util/image/constants/TifConstants.java +0 -45
  137. data/src/main/java/processing/core/util/image/load/AwtImageLoadStrategy.java +0 -80
  138. data/src/main/java/processing/core/util/image/load/Base64StringImageLoadStrategy.java +0 -73
  139. data/src/main/java/processing/core/util/image/load/FallbackImageLoadStrategy.java +0 -70
  140. data/src/main/java/processing/core/util/image/load/ImageIoImageLoadStrategy.java +0 -132
  141. data/src/main/java/processing/core/util/image/load/ImageLoadStrategy.java +0 -48
  142. data/src/main/java/processing/core/util/image/load/ImageLoadUtil.java +0 -45
  143. data/src/main/java/processing/core/util/image/load/TgaImageLoadStrategy.java +0 -255
  144. data/src/main/java/processing/core/util/image/load/TiffImageLoadStrategy.java +0 -98
  145. data/src/main/java/processing/core/util/image/save/ImageSaveStrategy.java +0 -49
  146. data/src/main/java/processing/core/util/image/save/ImageSaveUtil.java +0 -48
  147. data/src/main/java/processing/core/util/image/save/ImageWriterImageSaveStrategy.java +0 -179
  148. data/src/main/java/processing/core/util/image/save/SaveImageException.java +0 -41
  149. data/src/main/java/processing/core/util/image/save/TgaImageSaveStrategy.java +0 -198
  150. data/src/main/java/processing/core/util/image/save/TiffImageSaveStrategy.java +0 -91
  151. data/src/main/java/processing/core/util/image/save/TiffNakedFilenameImageSaveStrategy.java +0 -57
  152. data/src/main/java/processing/core/util/io/InputFactory.java +0 -285
  153. data/src/main/java/processing/core/util/io/PathUtil.java +0 -109
  154. data/src/main/java/processing/opengl/shaders/LightVert-brcm.glsl +0 -154
  155. data/src/main/java/processing/opengl/shaders/LightVert-vc4.glsl +0 -154
  156. data/src/main/java/processing/opengl/shaders/TexLightVert-brcm.glsl +0 -160
  157. data/src/main/java/processing/opengl/shaders/TexLightVert-vc4.glsl +0 -160
@@ -1,73 +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.PImage;
29
-
30
- import javax.swing.*;
31
- import java.awt.*;
32
- import java.awt.color.ColorSpace;
33
- import java.awt.image.BufferedImage;
34
- import java.util.Base64;
35
-
36
-
37
- /**
38
- * Strategy for loading images from Base64 strings.
39
- */
40
- public class Base64StringImageLoadStrategy implements ImageLoadStrategy {
41
-
42
- @Override
43
- public PImage load(PApplet pApplet, String content, String extension) {
44
- byte[] decodedBytes = Base64.getDecoder().decode(content);
45
-
46
- if(decodedBytes == null){
47
- System.err.println("Decode Error on image: " + content.substring(0, 20));
48
- return null;
49
- }
50
-
51
- Image awtImage = new ImageIcon(decodedBytes).getImage();
52
-
53
- if (awtImage instanceof BufferedImage) {
54
- BufferedImage buffImage = (BufferedImage) awtImage;
55
- int space = buffImage.getColorModel().getColorSpace().getType();
56
- if (space == ColorSpace.TYPE_CMYK) {
57
- return null;
58
- }
59
- }
60
-
61
- PImage loadedImage = new PImage(
62
- awtImage,
63
- ImageLoadUtil.checkExtensionRequiresAlpha(extension)
64
- );
65
-
66
- if (loadedImage.width == -1) {
67
- // error...
68
- }
69
-
70
- return loadedImage;
71
- }
72
-
73
- }
@@ -1,70 +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.PImage;
29
-
30
-
31
- /**
32
- * Image load strategy which uses a secondary strategy if failed.
33
- *
34
- * <p>
35
- * Image loading strategy strategy which attempts to load an image first through a "primary
36
- * strategy" and, if the primary failed, it then attemps loading through an alternative "secondary
37
- * strategy".
38
- * </p>
39
- */
40
- public class FallbackImageLoadStrategy implements ImageLoadStrategy {
41
-
42
- private ImageLoadStrategy primaryStrategy;
43
- private ImageLoadStrategy secondaryStrategy;
44
-
45
- /**
46
- * Create a new fallback image loading strategy.
47
- *
48
- * @param newPrimaryStrategy The strategy to try first.
49
- * @param newSecondaryStrategy The strategy to try if the first fails.
50
- */
51
- public FallbackImageLoadStrategy(ImageLoadStrategy newPrimaryStrategy,
52
- ImageLoadStrategy newSecondaryStrategy) {
53
-
54
- primaryStrategy = newPrimaryStrategy;
55
- secondaryStrategy = newSecondaryStrategy;
56
- }
57
-
58
- @Override
59
- public PImage load(PApplet pApplet, String path, String extension) {
60
- try {
61
- return primaryStrategy.load(pApplet, path, extension);
62
- } catch (Exception e) {
63
- // show error, but move on to the stuff below, see if it'll work
64
- e.printStackTrace();
65
-
66
- return secondaryStrategy.load(pApplet, path, extension);
67
- }
68
- }
69
-
70
- }
@@ -1,132 +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
-
26
- package processing.core.util.image.load;
27
-
28
- import processing.core.PApplet;
29
- import processing.core.PImage;
30
- import processing.core.util.io.InputFactory;
31
-
32
- import javax.imageio.ImageIO;
33
- import java.awt.image.BufferedImage;
34
- import java.io.IOException;
35
- import java.io.InputStream;
36
- import java.util.concurrent.atomic.AtomicReference;
37
-
38
-
39
- /**
40
- * Use Java 1.4 ImageIO methods to load an image.
41
- */
42
- public class ImageIoImageLoadStrategy implements ImageLoadStrategy {
43
-
44
- private final AtomicReference<String[]> cachedLoadImageFormats;
45
-
46
- public ImageIoImageLoadStrategy() {
47
- cachedLoadImageFormats = new AtomicReference<>(null);
48
- }
49
-
50
- /**
51
- * Load an image after checking that its format is supported.
52
- *
53
- * @param pApplet The PApplet on whose behalf an image is being loaded. If null, cannot use sketch
54
- * relative file paths.
55
- * @param path The path to the file like "subdirectory/file.png". Note that paths without
56
- * extensions are supported and the extension is not read off this path but instead must be
57
- * specified in the extension parameter.
58
- * @param extension The extension of the file to open.
59
- * @return The newly loaded image.
60
- */
61
- @Override
62
- public PImage load(PApplet pApplet, String path, String extension) {
63
- String[] loadImageFormats = getLoadImageFormats();
64
-
65
- if (loadImageFormats != null) {
66
- for (String loadImageFormat : loadImageFormats) {
67
- if (extension.equals(loadImageFormat)) {
68
- return loadImageIOInner(pApplet, path);
69
- }
70
- }
71
- }
72
-
73
- // failed, could not load image after all those attempts
74
- System.err.println("Could not find a method to load " + path);
75
- return null;
76
- }
77
-
78
- /**
79
- * Get the list of supported image formats.
80
- *
81
- * @return List of image formats like "png" that are supported by this strategy.
82
- */
83
- private String[] getLoadImageFormats() {
84
- cachedLoadImageFormats.compareAndSet(null, ImageIO.getReaderFormatNames());
85
- return cachedLoadImageFormats.get();
86
- }
87
-
88
- /**
89
- * Load an image without checking that its format is supported.
90
- *
91
- * @param pApplet The PApplet on whose behalf an image is being loaded. If null, cannot use sketch
92
- * relative file paths.
93
- * @param path The path to the file like "subdirectory/file.png". Note that paths without
94
- * extensions are supported and the extension is not read off this path but instead must be
95
- * specified in the extension parameter.
96
- * @return The newly loaded image.
97
- */
98
- private PImage loadImageIOInner(PApplet pApplet, String filename) {
99
- InputStream stream = InputFactory.createInput(pApplet, filename);
100
- if (stream == null) {
101
- System.err.println("The image " + filename + " could not be found.");
102
- return null;
103
- }
104
-
105
- try {
106
- BufferedImage bi = ImageIO.read(stream);
107
-
108
- int width = bi.getWidth();
109
- int height = bi.getHeight();
110
- int[] pixels = new int[width * height];
111
-
112
- bi.getRGB(0, 0, width, height, pixels, 0, width);
113
-
114
- // check the alpha for this image
115
- // was gonna call getType() on the image to see if RGB or ARGB,
116
- // but it's not actually useful, since gif images will come through
117
- // as TYPE_BYTE_INDEXED, which means it'll still have to check for
118
- // the transparency. also, would have to iterate through all the other
119
- // types and guess whether alpha was in there, so.. just gonna stick
120
- // with the old method.
121
- PImage outgoing = new PImage(width, height, pixels, true, pApplet);
122
-
123
- stream.close();
124
- // return the image
125
- return outgoing;
126
-
127
- } catch (IOException e) {
128
- return null;
129
- }
130
- }
131
-
132
- }
@@ -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.load;
26
-
27
- import processing.core.PApplet;
28
- import processing.core.PImage;
29
-
30
-
31
- /**
32
- * Interface for strategies to load different image formats and through different methods.
33
- */
34
- public interface ImageLoadStrategy {
35
-
36
- /**
37
- * Load an image.
38
- *
39
- * @param pApplet The PApplet on whose behalf an image is being loaded.
40
- * @param path The path to the file like "subdirectory/file.png". Note that paths without
41
- * extensions are supported and the extension is not read off this path but instead must be
42
- * specified in the extension parameter.
43
- * @param extension The extension of the file to open.
44
- * @return The PImage loaded from the given path.
45
- */
46
- PImage load(PApplet pApplet, String path, String extension);
47
-
48
- }
@@ -1,45 +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
-
28
- /**
29
- * Convenience functions for use while loading images.
30
- */
31
- public class ImageLoadUtil {
32
-
33
- /**
34
- * Determine if a file requires alpha channel checking.
35
- *
36
- * @param extension The file extension.
37
- * @return True if one needs to look for alpha channel and false otherwise.
38
- */
39
- public static boolean checkExtensionRequiresAlpha(String extension) {
40
- return extension.equals("gif") ||
41
- extension.equals("png") ||
42
- extension.equals("unknown");
43
- }
44
-
45
- }
@@ -1,255 +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
-
31
- import java.io.IOException;
32
- import java.io.InputStream;
33
-
34
-
35
- /**
36
- * Strategy for loading a RLE-compressed TGA image.
37
- */
38
- public class TgaImageLoadStrategy implements ImageLoadStrategy {
39
-
40
- @Override
41
- public PImage load(PApplet pApplet, String path, String extension) {
42
- try {
43
- PImage image = loadNoCatch(pApplet, path);
44
- return image;
45
- } catch (IOException e) {
46
- e.printStackTrace();
47
- return null;
48
- }
49
- }
50
-
51
- /**
52
- * Targa image loader for RLE-compressed TGA files which throws exceptions.
53
- * <p>
54
- * Rewritten for 0115 to read/write RLE-encoded targa images.
55
- * For 0125, non-RLE encoded images are now supported, along with
56
- * images whose y-order is reversed (which is standard for TGA files).
57
- * <p>
58
- * A version of this function is in MovieMaker.java. Any fixes here
59
- * should be applied over in MovieMaker as well.
60
- * <p>
61
- * Known issue with RLE encoding and odd behavior in some apps:
62
- * https://github.com/processing/processing/issues/2096
63
- * Please help!
64
- */
65
- private PImage loadNoCatch(PApplet pApplet, String filename) throws IOException {
66
- InputStream is = pApplet.createInput(filename);
67
- if (is == null) return null;
68
-
69
- byte header[] = new byte[18];
70
- int offset = 0;
71
- do {
72
- int count = is.read(header, offset, header.length - offset);
73
- if (count == -1) return null;
74
- offset += count;
75
- } while (offset < 18);
76
-
77
- /*
78
- header[2] image type code
79
- 2 (0x02) - Uncompressed, RGB images.
80
- 3 (0x03) - Uncompressed, black and white images.
81
- 10 (0x0A) - Run-length encoded RGB images.
82
- 11 (0x0B) - Compressed, black and white images. (grayscale?)
83
-
84
- header[16] is the bit depth (8, 24, 32)
85
-
86
- header[17] image descriptor (packed bits)
87
- 0x20 is 32 = origin upper-left
88
- 0x28 is 32 + 8 = origin upper-left + 32 bits
89
-
90
- 7 6 5 4 3 2 1 0
91
- 128 64 32 16 8 4 2 1
92
- */
93
-
94
- int format = 0;
95
-
96
- if (((header[2] == 3) || (header[2] == 11)) && // B&W, plus RLE or not
97
- (header[16] == 8) && // 8 bits
98
- ((header[17] == 0x8) || (header[17] == 0x28))) { // origin, 32 bit
99
- format = PConstants.ALPHA;
100
-
101
- } else if (((header[2] == 2) || (header[2] == 10)) && // RGB, RLE or not
102
- (header[16] == 24) && // 24 bits
103
- ((header[17] == 0x20) || (header[17] == 0))) { // origin
104
- format = PConstants.RGB;
105
-
106
- } else if (((header[2] == 2) || (header[2] == 10)) &&
107
- (header[16] == 32) &&
108
- ((header[17] == 0x8) || (header[17] == 0x28))) { // origin, 32
109
- format = PConstants.ARGB;
110
- }
111
-
112
- if (format == 0) {
113
- System.err.println("Unknown .tga file format for " + filename);
114
- //" (" + header[2] + " " +
115
- //(header[16] & 0xff) + " " +
116
- //hex(header[17], 2) + ")");
117
- return null;
118
- }
119
-
120
- int w = ((header[13] & 0xff) << 8) + (header[12] & 0xff);
121
- int h = ((header[15] & 0xff) << 8) + (header[14] & 0xff);
122
- PImage outgoing = pApplet.createImage(w, h, format);
123
-
124
- // where "reversed" means upper-left corner (normal for most of
125
- // the modernized world, but "reversed" for the tga spec)
126
- //boolean reversed = (header[17] & 0x20) != 0;
127
- // https://github.com/processing/processing/issues/1682
128
- boolean reversed = (header[17] & 0x20) == 0;
129
-
130
- if ((header[2] == 2) || (header[2] == 3)) { // not RLE encoded
131
- if (reversed) {
132
- int index = (h-1) * w;
133
- switch (format) {
134
- case PConstants.ALPHA:
135
- for (int y = h-1; y >= 0; y--) {
136
- for (int x = 0; x < w; x++) {
137
- outgoing.pixels[index + x] = is.read();
138
- }
139
- index -= w;
140
- }
141
- break;
142
- case PConstants.RGB:
143
- for (int y = h-1; y >= 0; y--) {
144
- for (int x = 0; x < w; x++) {
145
- outgoing.pixels[index + x] =
146
- is.read() | (is.read() << 8) | (is.read() << 16) |
147
- 0xff000000;
148
- }
149
- index -= w;
150
- }
151
- break;
152
- case PConstants.ARGB:
153
- for (int y = h-1; y >= 0; y--) {
154
- for (int x = 0; x < w; x++) {
155
- outgoing.pixels[index + x] =
156
- is.read() | (is.read() << 8) | (is.read() << 16) |
157
- (is.read() << 24);
158
- }
159
- index -= w;
160
- }
161
- }
162
- } else { // not reversed
163
- int count = w * h;
164
- switch (format) {
165
- case PConstants.ALPHA:
166
- for (int i = 0; i < count; i++) {
167
- outgoing.pixels[i] = is.read();
168
- }
169
- break;
170
- case PConstants.RGB:
171
- for (int i = 0; i < count; i++) {
172
- outgoing.pixels[i] =
173
- is.read() | (is.read() << 8) | (is.read() << 16) |
174
- 0xff000000;
175
- }
176
- break;
177
- case PConstants.ARGB:
178
- for (int i = 0; i < count; i++) {
179
- outgoing.pixels[i] =
180
- is.read() | (is.read() << 8) | (is.read() << 16) |
181
- (is.read() << 24);
182
- }
183
- break;
184
- }
185
- }
186
-
187
- } else { // header[2] is 10 or 11
188
- int index = 0;
189
- int px[] = outgoing.pixels;
190
-
191
- while (index < px.length) {
192
- int num = is.read();
193
- boolean isRLE = (num & 0x80) != 0;
194
- if (isRLE) {
195
- num -= 127; // (num & 0x7F) + 1
196
- int pixel = 0;
197
- switch (format) {
198
- case PConstants.ALPHA:
199
- pixel = is.read();
200
- break;
201
- case PConstants.RGB:
202
- pixel = 0xFF000000 |
203
- is.read() | (is.read() << 8) | (is.read() << 16);
204
- //(is.read() << 16) | (is.read() << 8) | is.read();
205
- break;
206
- case PConstants.ARGB:
207
- pixel = is.read() |
208
- (is.read() << 8) | (is.read() << 16) | (is.read() << 24);
209
- break;
210
- }
211
- for (int i = 0; i < num; i++) {
212
- px[index++] = pixel;
213
- if (index == px.length) break;
214
- }
215
- } else { // write up to 127 bytes as uncompressed
216
- num += 1;
217
- switch (format) {
218
- case PConstants.ALPHA:
219
- for (int i = 0; i < num; i++) {
220
- px[index++] = is.read();
221
- }
222
- break;
223
- case PConstants.RGB:
224
- for (int i = 0; i < num; i++) {
225
- px[index++] = 0xFF000000 |
226
- is.read() | (is.read() << 8) | (is.read() << 16);
227
- //(is.read() << 16) | (is.read() << 8) | is.read();
228
- }
229
- break;
230
- case PConstants.ARGB:
231
- for (int i = 0; i < num; i++) {
232
- px[index++] = is.read() | //(is.read() << 24) |
233
- (is.read() << 8) | (is.read() << 16) | (is.read() << 24);
234
- //(is.read() << 16) | (is.read() << 8) | is.read();
235
- }
236
- break;
237
- }
238
- }
239
- }
240
-
241
- if (!reversed) {
242
- int[] temp = new int[w];
243
- for (int y = 0; y < h/2; y++) {
244
- int z = (h-1) - y;
245
- System.arraycopy(px, y*w, temp, 0, w);
246
- System.arraycopy(px, z*w, px, y*w, w);
247
- System.arraycopy(temp, 0, px, z*w, w);
248
- }
249
- }
250
- }
251
- is.close();
252
- return outgoing;
253
- }
254
-
255
- }