src/macosx/classes/sun/lwawt/macosx/CImage.java
Print this page
@@ -27,14 +27,18 @@
import java.awt.*;
import java.awt.geom.Dimension2D;
import java.awt.image.*;
+import java.util.Arrays;
+import java.util.List;
+
import sun.awt.image.SunWritableRaster;
public class CImage extends CFRetainedResource {
private static native long nativeCreateNSImageFromArray(int[] buffer, int w, int h);
+ private static native long nativeCreateNSImageFromArrays(int[][] buffers, int w[], int h[]);
private static native long nativeCreateNSImageFromFileContents(String file);
private static native long nativeCreateNSImageOfFileFromLaunchServices(String file);
private static native long nativeCreateNSImageFromImageName(String name);
private static native long nativeCreateNSImageFromIconSelector(int selector);
private static native void nativeCopyNSImageIntoArray(long image, int[] buffer, int w, int h);
@@ -91,12 +95,11 @@
public Image createImageFromName(final String name) {
return createImageUsingNativeSize(nativeCreateNSImageFromImageName(name));
}
- // This is used to create a CImage from a Image
- public CImage createFromImage(final Image image) {
+ private static int[] imageToArray(Image image) {
if (image == null) return null;
MediaTracker mt = new MediaTracker(new Label());
final int id = 0;
mt.addImage(image, id);
@@ -115,12 +118,54 @@
BufferedImage bimg = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB_PRE);
Graphics2D g2 = bimg.createGraphics();
g2.setComposite(AlphaComposite.Src);
g2.drawImage(image, 0, 0, null);
g2.dispose();
- int[] buffer = ((DataBufferInt)bimg.getRaster().getDataBuffer()).getData();
- return new CImage(nativeCreateNSImageFromArray(buffer, w, h));
+ return ((DataBufferInt)bimg.getRaster().getDataBuffer()).getData();
+ }
+
+ // This is used to create a CImage from a Image
+ public CImage createFromImage(final Image image) {
+ int[] buffer = imageToArray(image);
+ if (buffer == null) {
+ return null;
+ }
+ return new CImage(nativeCreateNSImageFromArray(buffer, image.getWidth(null), image.getHeight(null)));
+ }
+
+ public CImage createFromImages(List<Image> images) {
+ if (images == null || images.isEmpty()) {
+ return null;
+ }
+
+ int num = images.size();
+
+ int[][] buffers = new int[num][];
+ int[] w = new int[num];
+ int[] h = new int[num];
+
+ num = 0;
+
+ for (Image img : images) {
+ buffers[num] = imageToArray(img);
+ if (buffers[num] == null) {
+ // Unable to process the image
+ continue;
+ }
+ w[num] = img.getWidth(null);
+ h[num] = img.getHeight(null);
+ num++;
+ }
+
+ if (num == 0) {
+ return null;
+ }
+
+ return new CImage(nativeCreateNSImageFromArrays(
+ Arrays.copyOf(buffers, num),
+ Arrays.copyOf(w, num),
+ Arrays.copyOf(h, num)));
}
static int getSelectorAsInt(final String fromString) {
final byte[] b = fromString.getBytes();
final int len = Math.min(b.length, 4);