|
@@ -36,64 +36,69 @@ public class DefaultImageRaster extends ImageRaster {
|
|
|
|
|
|
@Override
|
|
|
public void setPixel(int x, int y, ColorRGBA color) {
|
|
|
- rangeCheck(x, y);
|
|
|
+// rangeCheck(x, y);
|
|
|
|
|
|
// Check flags for grayscale
|
|
|
- if ((codec.flags & ImageCodec.FLAG_GRAY) != 0) {
|
|
|
+ if (codec.isGray) {
|
|
|
float gray = color.r * 0.27f + color.g * 0.67f + color.b * 0.06f;
|
|
|
color = new ColorRGBA(gray, gray, gray, color.a);
|
|
|
}
|
|
|
|
|
|
- if ((codec.flags & ImageCodec.FLAG_F16) != 0) {
|
|
|
- components[0] = (int) FastMath.convertFloatToHalf(color.a);
|
|
|
- components[1] = (int) FastMath.convertFloatToHalf(color.r);
|
|
|
- components[2] = (int) FastMath.convertFloatToHalf(color.g);
|
|
|
- components[3] = (int) FastMath.convertFloatToHalf(color.b);
|
|
|
- } else if ((codec.flags & ImageCodec.FLAG_F32) != 0) {
|
|
|
- components[0] = (int) Float.floatToIntBits(color.a);
|
|
|
- components[1] = (int) Float.floatToIntBits(color.r);
|
|
|
- components[2] = (int) Float.floatToIntBits(color.g);
|
|
|
- components[3] = (int) Float.floatToIntBits(color.b);
|
|
|
- } else {
|
|
|
- // Convert color to bits by multiplying by size
|
|
|
- components[0] = Math.min( (int) (color.a * codec.maxAlpha + 0.5f), codec.maxAlpha);
|
|
|
- components[1] = Math.min( (int) (color.r * codec.maxRed + 0.5f), codec.maxRed);
|
|
|
- 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);
|
|
|
+ switch (codec.type) {
|
|
|
+ case ImageCodec.FLAG_F16:
|
|
|
+ components[0] = (int) FastMath.convertFloatToHalf(color.a);
|
|
|
+ components[1] = (int) FastMath.convertFloatToHalf(color.r);
|
|
|
+ components[2] = (int) FastMath.convertFloatToHalf(color.g);
|
|
|
+ components[3] = (int) FastMath.convertFloatToHalf(color.b);
|
|
|
+ break;
|
|
|
+ case ImageCodec.FLAG_F32:
|
|
|
+ components[0] = (int) Float.floatToIntBits(color.a);
|
|
|
+ components[1] = (int) Float.floatToIntBits(color.r);
|
|
|
+ components[2] = (int) Float.floatToIntBits(color.g);
|
|
|
+ components[3] = (int) Float.floatToIntBits(color.b);
|
|
|
+ break;
|
|
|
+ case 0:
|
|
|
+ // Convert color to bits by multiplying by size
|
|
|
+ components[0] = Math.min( (int) (color.a * codec.maxAlpha + 0.5f), codec.maxAlpha);
|
|
|
+ components[1] = Math.min( (int) (color.r * codec.maxRed + 0.5f), codec.maxRed);
|
|
|
+ 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);
|
|
|
+ break;
|
|
|
}
|
|
|
-
|
|
|
codec.writeComponents(buffer, x, y, width, components, temp);
|
|
|
-
|
|
|
image.setUpdateNeeded();
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public ColorRGBA getPixel(int x, int y, ColorRGBA store) {
|
|
|
- rangeCheck(x, y);
|
|
|
+// rangeCheck(x, y);
|
|
|
|
|
|
codec.readComponents(buffer, x, y, width, components, temp);
|
|
|
-
|
|
|
if (store == null) {
|
|
|
store = new ColorRGBA();
|
|
|
}
|
|
|
- if ((codec.flags & ImageCodec.FLAG_F16) != 0) {
|
|
|
- store.set(FastMath.convertHalfToFloat((short)components[1]),
|
|
|
- FastMath.convertHalfToFloat((short)components[2]),
|
|
|
- FastMath.convertHalfToFloat((short)components[3]),
|
|
|
- FastMath.convertHalfToFloat((short)components[0]));
|
|
|
- } else if ((codec.flags & ImageCodec.FLAG_F32) != 0) {
|
|
|
- store.set(Float.intBitsToFloat((int)components[1]),
|
|
|
- Float.intBitsToFloat((int)components[2]),
|
|
|
- Float.intBitsToFloat((int)components[3]),
|
|
|
- Float.intBitsToFloat((int)components[0]));
|
|
|
- } else {
|
|
|
- // Convert to float and divide by bitsize to get into range 0.0 - 1.0.
|
|
|
- store.set((float)components[1] / codec.maxRed,
|
|
|
- (float)components[2] / codec.maxGreen,
|
|
|
- (float)components[3] / codec.maxBlue,
|
|
|
- (float)components[0] / codec.maxAlpha);
|
|
|
+ switch (codec.type) {
|
|
|
+ case ImageCodec.FLAG_F16:
|
|
|
+ store.set(FastMath.convertHalfToFloat((short)components[1]),
|
|
|
+ FastMath.convertHalfToFloat((short)components[2]),
|
|
|
+ FastMath.convertHalfToFloat((short)components[3]),
|
|
|
+ FastMath.convertHalfToFloat((short)components[0]));
|
|
|
+ break;
|
|
|
+ case ImageCodec.FLAG_F32:
|
|
|
+ store.set(Float.intBitsToFloat((int)components[1]),
|
|
|
+ Float.intBitsToFloat((int)components[2]),
|
|
|
+ Float.intBitsToFloat((int)components[3]),
|
|
|
+ Float.intBitsToFloat((int)components[0]));
|
|
|
+ break;
|
|
|
+ case 0:
|
|
|
+ // Convert to float and divide by bitsize to get into range 0.0 - 1.0.
|
|
|
+ store.set((float)components[1] / codec.maxRed,
|
|
|
+ (float)components[2] / codec.maxGreen,
|
|
|
+ (float)components[3] / codec.maxBlue,
|
|
|
+ (float)components[0] / codec.maxAlpha);
|
|
|
+ break;
|
|
|
}
|
|
|
- if ((codec.flags & ImageCodec.FLAG_GRAY) != 0) {
|
|
|
+ if (codec.isGray) {
|
|
|
store.g = store.b = store.r;
|
|
|
} else {
|
|
|
if (codec.maxRed == 0) {
|