src/macosx/classes/sun/lwawt/macosx/CImage.java
Print this page
*** 27,40 ****
--- 27,44 ----
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,102 ****
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) {
if (image == null) return null;
MediaTracker mt = new MediaTracker(new Label());
final int id = 0;
mt.addImage(image, id);
--- 95,105 ----
public Image createImageFromName(final String name) {
return createImageUsingNativeSize(nativeCreateNSImageFromImageName(name));
}
! 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,126 ****
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));
}
static int getSelectorAsInt(final String fromString) {
final byte[] b = fromString.getBytes();
final int len = Math.min(b.length, 4);
--- 118,171 ----
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();
! 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);