|
@@ -39,12 +39,13 @@ import java.nio.ByteBuffer;
|
|
public class DefaultImageRaster extends ImageRaster {
|
|
public class DefaultImageRaster extends ImageRaster {
|
|
|
|
|
|
private final int[] components = new int[4];
|
|
private final int[] components = new int[4];
|
|
- private final ByteBuffer buffer;
|
|
|
|
|
|
+ private ByteBuffer buffer;
|
|
private final Image image;
|
|
private final Image image;
|
|
private final ImageCodec codec;
|
|
private final ImageCodec codec;
|
|
private final int width;
|
|
private final int width;
|
|
private final int height;
|
|
private final int height;
|
|
private final byte[] temp;
|
|
private final byte[] temp;
|
|
|
|
+ private int slice;
|
|
|
|
|
|
private void rangeCheck(int x, int y) {
|
|
private void rangeCheck(int x, int y) {
|
|
if (x < 0 || y < 0 || x >= width || y >= height) {
|
|
if (x < 0 || y < 0 || x >= width || y >= height) {
|
|
@@ -54,6 +55,7 @@ public class DefaultImageRaster extends ImageRaster {
|
|
|
|
|
|
public DefaultImageRaster(Image image, int slice) {
|
|
public DefaultImageRaster(Image image, int slice) {
|
|
this.image = image;
|
|
this.image = image;
|
|
|
|
+ this.slice = slice;
|
|
this.buffer = image.getData(slice);
|
|
this.buffer = image.getData(slice);
|
|
this.codec = ImageCodec.lookup(image.getFormat());
|
|
this.codec = ImageCodec.lookup(image.getFormat());
|
|
this.width = image.getWidth();
|
|
this.width = image.getWidth();
|
|
@@ -105,16 +107,23 @@ public class DefaultImageRaster extends ImageRaster {
|
|
components[2] = Math.min( (int) (color.g * codec.maxGreen + 0.5f), codec.maxGreen);
|
|
components[2] = Math.min( (int) (color.g * codec.maxGreen + 0.5f), codec.maxGreen);
|
|
components[3] = Math.min( (int) (color.b * codec.maxBlue + 0.5f), codec.maxBlue);
|
|
components[3] = Math.min( (int) (color.b * codec.maxBlue + 0.5f), codec.maxBlue);
|
|
break;
|
|
break;
|
|
- }
|
|
|
|
- codec.writeComponents(buffer, x, y, width, components, temp);
|
|
|
|
|
|
+ }
|
|
|
|
+ codec.writeComponents(getBuffer(), x, y, width, components, temp);
|
|
image.setUpdateNeeded();
|
|
image.setUpdateNeeded();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ private ByteBuffer getBuffer(){
|
|
|
|
+ if(buffer == null){
|
|
|
|
+ this.buffer = image.getData(slice);
|
|
|
|
+ }
|
|
|
|
+ return buffer;
|
|
|
|
+ }
|
|
|
|
+
|
|
@Override
|
|
@Override
|
|
public ColorRGBA getPixel(int x, int y, ColorRGBA store) {
|
|
public ColorRGBA getPixel(int x, int y, ColorRGBA store) {
|
|
rangeCheck(x, y);
|
|
rangeCheck(x, y);
|
|
|
|
|
|
- codec.readComponents(buffer, x, y, width, components, temp);
|
|
|
|
|
|
+ codec.readComponents(getBuffer(), x, y, width, components, temp);
|
|
if (store == null) {
|
|
if (store == null) {
|
|
store = new ColorRGBA();
|
|
store = new ColorRGBA();
|
|
}
|
|
}
|