package freeseawind.ninepatch.javafx; import java.nio.IntBuffer; import freeseawind.ninepatch.common.AbstractNinePatch; import freeseawind.ninepatch.common.RepeatType; import javafx.scene.canvas.GraphicsContext; import javafx.scene.image.Image; import javafx.scene.image.PixelFormat; import javafx.scene.image.PixelReader; import javafx.scene.image.WritablePixelFormat; /** * * @author freeseawind@github * */ public class FxNinePatch extends AbstractNinePatch<Image, GraphicsContext> { public FxNinePatch(Image image) { super(image, null); } public FxNinePatch(Image image, RepeatType repeatType) { super(image, repeatType); } @Override public int[] getPixels(Image img, int x, int y, int w, int h) { int[] pixels = new int[w * h]; PixelReader reader = img.getPixelReader(); PixelFormat.Type type = reader.getPixelFormat().getType(); WritablePixelFormat<IntBuffer> format = null; if(type == PixelFormat.Type.INT_ARGB_PRE) { format = PixelFormat.getIntArgbPreInstance(); } else { format = PixelFormat.getIntArgbInstance(); } reader.getPixels(x, y, w, h, format, pixels, 0, w); return pixels; } @Override public int getImageWidth(Image img) { return img.widthProperty().intValue(); } @Override public int getImageHeight(Image img) { return img.heightProperty().intValue(); } @Override public void translate(GraphicsContext g2d, int x, int y) { g2d.translate(x, y); } @Override public void drawImage(GraphicsContext g2d, Image image, int x, int y, int scaledWidth, int scaledHeight) { g2d.drawImage(image, x, y, scaledWidth, scaledHeight); } @Override public void drawImage(GraphicsContext g2d, Image image, int sx, int sy, int sw, int sh, int dx, int dy, int dw, int dh) { g2d.drawImage(image, sx, sy, sw, sh, dx, dy, dw, dh); } }