src/macosx/classes/sun/lwawt/macosx/CImage.java

Print this page

        

*** 30,53 **** import java.awt.image.*; import java.util.Arrays; import java.util.List; import sun.awt.image.MultiResolutionImage; 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); private static native Dimension2D nativeGetNSImageSize(long image); private static native void nativeSetNSImageSize(long image, double w, double h); private static native void nativeResizeNSImageRepresentations(long image, double w, double h); static Creator creator = new Creator(); static Creator getCreator() { return creator; } --- 30,55 ---- import java.awt.image.*; import java.util.Arrays; import java.util.List; import sun.awt.image.MultiResolutionImage; + import sun.awt.image.MultiResolutionBufferedImage; 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 sw, int sh, int dw, int dh); private static native Dimension2D nativeGetNSImageSize(long image); private static native void nativeSetNSImageSize(long image, double w, double h); private static native void nativeResizeNSImageRepresentations(long image, double w, double h); + private static native Dimension2D[] nativeGetNSImageRepresentationSizes(long image, double w, double h); static Creator creator = new Creator(); static Creator getCreator() { return creator; }
*** 208,229 **** CImage(long nsImagePtr) { super(nsImagePtr, true); } ! /** @return A BufferedImage created from nsImagePtr, or null. */ ! public BufferedImage toImage() { if (ptr == 0) return null; final Dimension2D size = nativeGetNSImageSize(ptr); final int w = (int)size.getWidth(); final int h = (int)size.getHeight(); ! final BufferedImage bimg = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB_PRE); final DataBufferInt dbi = (DataBufferInt)bimg.getRaster().getDataBuffer(); final int[] buffer = SunWritableRaster.stealData(dbi, 0); ! nativeCopyNSImageIntoArray(ptr, buffer, w, h); SunWritableRaster.markDirty(dbi); return bimg; } /** If nsImagePtr != 0 then scale this NSImage. @return *this* */ --- 210,256 ---- CImage(long nsImagePtr) { super(nsImagePtr, true); } ! /** @return A MultiResolution image created from nsImagePtr, or null. */ ! private BufferedImage toImage() { if (ptr == 0) return null; final Dimension2D size = nativeGetNSImageSize(ptr); final int w = (int)size.getWidth(); final int h = (int)size.getHeight(); ! Dimension2D[] sizes ! = nativeGetNSImageRepresentationSizes(ptr, ! size.getWidth(), size.getHeight()); ! ! if (sizes == null || sizes.length < 2) { ! return toImage(w, h, w, h); ! } ! ! BufferedImage[] images = new BufferedImage[sizes.length]; ! int currentImageIndex = 0; ! ! for (int i = 0; i < sizes.length; i++) { ! int imageRepWidth = (int) sizes[i].getWidth(); ! int imageRepHeight = (int) sizes[i].getHeight(); ! ! if(imageRepHeight <= w && imageRepHeight <= h){ ! currentImageIndex = i; ! } ! images[i] = toImage(w, h, imageRepWidth, imageRepHeight); ! } ! return new MultiResolutionBufferedImage(BufferedImage.TYPE_INT_ARGB_PRE, ! currentImageIndex, images); ! } ! ! private BufferedImage toImage(int srcWidth, int srcHeight, int dstWidth, int dstHeight) { ! final BufferedImage bimg = new BufferedImage(dstWidth, dstHeight, BufferedImage.TYPE_INT_ARGB_PRE); final DataBufferInt dbi = (DataBufferInt)bimg.getRaster().getDataBuffer(); final int[] buffer = SunWritableRaster.stealData(dbi, 0); ! nativeCopyNSImageIntoArray(ptr, buffer, srcWidth, srcHeight, dstWidth, dstHeight); SunWritableRaster.markDirty(dbi); return bimg; } /** If nsImagePtr != 0 then scale this NSImage. @return *this* */