aboutsummaryrefslogtreecommitdiffstats
path: root/src/jogl/classes/jogamp/opengl/util/pngj/chunks/PngChunkBKGD.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/jogl/classes/jogamp/opengl/util/pngj/chunks/PngChunkBKGD.java')
-rw-r--r--src/jogl/classes/jogamp/opengl/util/pngj/chunks/PngChunkBKGD.java122
1 files changed, 122 insertions, 0 deletions
diff --git a/src/jogl/classes/jogamp/opengl/util/pngj/chunks/PngChunkBKGD.java b/src/jogl/classes/jogamp/opengl/util/pngj/chunks/PngChunkBKGD.java
new file mode 100644
index 000000000..51bbcb832
--- /dev/null
+++ b/src/jogl/classes/jogamp/opengl/util/pngj/chunks/PngChunkBKGD.java
@@ -0,0 +1,122 @@
+package jogamp.opengl.util.pngj.chunks;
+
+import jogamp.opengl.util.pngj.ImageInfo;
+import jogamp.opengl.util.pngj.PngHelper;
+import jogamp.opengl.util.pngj.PngjException;
+
+/*
+ */
+public class PngChunkBKGD extends PngChunk {
+ // http://www.w3.org/TR/PNG/#11bKGD
+ // this chunk structure depends on the image type
+ // only one of these is meaningful
+ private int gray;
+ private int red, green, blue;
+ private int paletteIndex;
+
+ public PngChunkBKGD(ImageInfo info) {
+ super(ChunkHelper.bKGD, info);
+ }
+
+ @Override
+ public boolean mustGoBeforeIDAT() {
+ return true;
+ }
+
+ @Override
+ public boolean mustGoAfterPLTE() {
+ return true;
+ }
+
+ @Override
+ public ChunkRaw createChunk() {
+ ChunkRaw c = null;
+ if (imgInfo.greyscale) {
+ c = createEmptyChunk(2, true);
+ PngHelper.writeInt2tobytes(gray, c.data, 0);
+ } else if (imgInfo.indexed) {
+ c = createEmptyChunk(1, true);
+ c.data[0] = (byte) paletteIndex;
+ } else {
+ c = createEmptyChunk(6, true);
+ PngHelper.writeInt2tobytes(red, c.data, 0);
+ PngHelper.writeInt2tobytes(green, c.data, 0);
+ PngHelper.writeInt2tobytes(blue, c.data, 0);
+ }
+ return c;
+ }
+
+ @Override
+ public void parseFromChunk(ChunkRaw c) {
+ if (imgInfo.greyscale) {
+ gray = PngHelper.readInt2fromBytes(c.data, 0);
+ } else if (imgInfo.indexed) {
+ paletteIndex = (int) (c.data[0] & 0xff);
+ } else {
+ red = PngHelper.readInt2fromBytes(c.data, 0);
+ green = PngHelper.readInt2fromBytes(c.data, 2);
+ blue = PngHelper.readInt2fromBytes(c.data, 4);
+ }
+ }
+
+ @Override
+ public void cloneDataFromRead(PngChunk other) {
+ PngChunkBKGD otherx = (PngChunkBKGD) other;
+ gray = otherx.gray;
+ red = otherx.red;
+ green = otherx.red;
+ blue = otherx.red;
+ paletteIndex = otherx.paletteIndex;
+ }
+
+ /**
+ * Set gray value (0-255 if bitdept=8)
+ *
+ * @param gray
+ */
+ public void setGray(int gray) {
+ if (!imgInfo.greyscale)
+ throw new PngjException("only gray images support this");
+ this.gray = gray;
+ }
+
+ public int getGray() {
+ if (!imgInfo.greyscale)
+ throw new PngjException("only gray images support this");
+ return gray;
+ }
+
+ /**
+ * Set pallette index
+ *
+ */
+ public void setPaletteIndex(int i) {
+ if (!imgInfo.indexed)
+ throw new PngjException("only indexed (pallete) images support this");
+ this.paletteIndex = i;
+ }
+
+ public int getPaletteIndex() {
+ if (!imgInfo.indexed)
+ throw new PngjException("only indexed (pallete) images support this");
+ return paletteIndex;
+ }
+
+ /**
+ * Set rgb values
+ *
+ */
+ public void setRGB(int r, int g, int b) {
+ if (imgInfo.greyscale || imgInfo.indexed)
+ throw new PngjException("only rgb or rgba images support this");
+ red = r;
+ green = g;
+ blue = b;
+ }
+
+ public int[] getRGB() {
+ if (imgInfo.greyscale || imgInfo.indexed)
+ throw new PngjException("only rgb or rgba images support this");
+ return new int[] { red, green, blue };
+ }
+}