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* */