169 lines
3.5 KiB
Java
169 lines
3.5 KiB
Java
package ar.com.hjg.pngj.chunks;
|
|
|
|
import ar.com.hjg.pngj.ImageInfo;
|
|
import ar.com.hjg.pngj.PngHelperInternal;
|
|
|
|
/**
|
|
* fcTL chunk. For APGN, not PGN standard
|
|
* <p>
|
|
* see
|
|
* https://wiki.mozilla.org/APNG_Specification#.60fcTL.60:_The_Frame_Control_Chunk
|
|
* <p>
|
|
*/
|
|
public class PngChunkFCTL extends PngChunkMultiple {
|
|
public final static String ID = "fcTL";
|
|
|
|
public final static byte APNG_DISPOSE_OP_NONE = 0;
|
|
public final static byte APNG_DISPOSE_OP_BACKGROUND = 1;
|
|
public final static byte APNG_DISPOSE_OP_PREVIOUS = 2;
|
|
public final static byte APNG_BLEND_OP_SOURCE = 0;
|
|
public final static byte APNG_BLEND_OP_OVER = 1;
|
|
|
|
private int seqNum;
|
|
private int width;
|
|
|
|
private int height;
|
|
|
|
private int xOff;
|
|
|
|
private int yOff;
|
|
private int delayNum;
|
|
|
|
private int delayDen;
|
|
private byte disposeOp;
|
|
|
|
private byte blendOp;
|
|
|
|
public PngChunkFCTL(ImageInfo info) {
|
|
super(ID, info);
|
|
}
|
|
|
|
public ImageInfo getEquivImageInfo() {
|
|
return new ImageInfo(width, height, imgInfo.bitDepth, imgInfo.alpha, imgInfo.greyscale, imgInfo.indexed);
|
|
}
|
|
|
|
@Override
|
|
public ChunkOrderingConstraint getOrderingConstraint() {
|
|
return ChunkOrderingConstraint.NONE;
|
|
}
|
|
|
|
@Override
|
|
public ChunkRaw createRawChunk() {
|
|
ChunkRaw c = createEmptyChunk(8, true);
|
|
int off = 0;
|
|
PngHelperInternal.writeInt4tobytes(seqNum, c.data, off);
|
|
off += 4;
|
|
PngHelperInternal.writeInt4tobytes(width, c.data, off);
|
|
off += 4;
|
|
PngHelperInternal.writeInt4tobytes(height, c.data, off);
|
|
off += 4;
|
|
PngHelperInternal.writeInt4tobytes(xOff, c.data, off);
|
|
off += 4;
|
|
PngHelperInternal.writeInt4tobytes(yOff, c.data, off);
|
|
off += 4;
|
|
PngHelperInternal.writeInt2tobytes(delayNum, c.data, off);
|
|
off += 2;
|
|
PngHelperInternal.writeInt2tobytes(delayDen, c.data, off);
|
|
off += 2;
|
|
c.data[off] = disposeOp;
|
|
off += 1;
|
|
c.data[off] = blendOp;
|
|
return c;
|
|
}
|
|
|
|
@Override
|
|
public void parseFromRaw(ChunkRaw chunk) {
|
|
int off = 0;
|
|
seqNum = PngHelperInternal.readInt4fromBytes(chunk.data, off);
|
|
off += 4;
|
|
width = PngHelperInternal.readInt4fromBytes(chunk.data, off);
|
|
off += 4;
|
|
height = PngHelperInternal.readInt4fromBytes(chunk.data, off);
|
|
off += 4;
|
|
xOff = PngHelperInternal.readInt4fromBytes(chunk.data, off);
|
|
off += 4;
|
|
yOff = PngHelperInternal.readInt4fromBytes(chunk.data, off);
|
|
off += 4;
|
|
delayNum = PngHelperInternal.readInt2fromBytes(chunk.data, off);
|
|
off += 2;
|
|
delayDen = PngHelperInternal.readInt2fromBytes(chunk.data, off);
|
|
off += 2;
|
|
disposeOp = chunk.data[off];
|
|
off += 1;
|
|
blendOp = chunk.data[off];
|
|
}
|
|
|
|
public int getSeqNum() {
|
|
return seqNum;
|
|
}
|
|
|
|
public void setSeqNum(int seqNum) {
|
|
this.seqNum = seqNum;
|
|
}
|
|
|
|
public int getWidth() {
|
|
return width;
|
|
}
|
|
|
|
public void setWidth(int width) {
|
|
this.width = width;
|
|
}
|
|
|
|
public int getHeight() {
|
|
return height;
|
|
}
|
|
|
|
public void setHeight(int height) {
|
|
this.height = height;
|
|
}
|
|
|
|
public int getxOff() {
|
|
return xOff;
|
|
}
|
|
|
|
public void setxOff(int xOff) {
|
|
this.xOff = xOff;
|
|
}
|
|
|
|
public int getyOff() {
|
|
return yOff;
|
|
}
|
|
|
|
public void setyOff(int yOff) {
|
|
this.yOff = yOff;
|
|
}
|
|
|
|
public int getDelayNum() {
|
|
return delayNum;
|
|
}
|
|
|
|
public void setDelayNum(int delayNum) {
|
|
this.delayNum = delayNum;
|
|
}
|
|
|
|
public int getDelayDen() {
|
|
return delayDen;
|
|
}
|
|
|
|
public void setDelayDen(int delayDen) {
|
|
this.delayDen = delayDen;
|
|
}
|
|
|
|
public byte getDisposeOp() {
|
|
return disposeOp;
|
|
}
|
|
|
|
public void setDisposeOp(byte disposeOp) {
|
|
this.disposeOp = disposeOp;
|
|
}
|
|
|
|
public byte getBlendOp() {
|
|
return blendOp;
|
|
}
|
|
|
|
public void setBlendOp(byte blendOp) {
|
|
this.blendOp = blendOp;
|
|
}
|
|
|
|
}
|