org.jpedal.parser.image.data.ImageData Maven / Gradle / Ivy
/*
* ===========================================
* Java Pdf Extraction Decoding Access Library
* ===========================================
*
* Project Info: http://www.idrsolutions.com
* Help section for developers at http://www.idrsolutions.com/support/
*
* (C) Copyright 1997-2017 IDRsolutions and Contributors.
*
* This file is part of JPedal/JPDF2HTML5
*
@LICENSE@
*
* ---------------
* ImageData.java
* ---------------
*/
package org.jpedal.parser.image.data;
import org.jpedal.io.PdfFilteredReader;
import org.jpedal.objects.raw.PdfArrayIterator;
import org.jpedal.objects.raw.PdfDictionary;
import org.jpedal.objects.raw.PdfObject;
import org.jpedal.parser.image.ImageCommands;
import org.jpedal.parser.image.PdfImageTypes;
public class ImageData {
int pX, pY;
int width, height, depth = 1, rawDepth = 1;
boolean imageMask;
byte[] objectData;
boolean isDCT, isJPX, isJBIG, wasDCT;
private int numComponents;
boolean isDownsampled;
int mode = ImageCommands.XOBJECT;
private boolean removed;
private float[] decodeArray;
private PdfImageTypes rawType = PdfImageTypes.Other;
private boolean isConvertedToARGB;
public ImageData(final byte[] objectData) {
this.objectData = objectData;
}
public ImageData(final PdfObject XObject, final byte[] objectData) {
this.objectData = objectData;
width = XObject.getInt(PdfDictionary.Width);
height = XObject.getInt(PdfDictionary.Height);
final int newDepth = XObject.getInt(PdfDictionary.BitsPerComponent);
if (newDepth != PdfDictionary.Unknown) {
depth = newDepth;
rawDepth = depth;
}
imageMask = XObject.getBoolean(PdfDictionary.ImageMask);
// decodeArray=XObject.getFloatArray(PdfDictionary.Decode);
}
public ImageData(final int mode) {
this.mode = mode;
}
public void setIsDownsampled(final boolean isDownsampled) {
this.isDownsampled = isDownsampled;
}
public boolean isDownsampled() {
return isDownsampled;
}
public int getMode() {
return mode;
}
public int getWidth() {
return width;
}
public int getHeight() {
return height;
}
public int getDepth() {
return depth;
}
public boolean isImageMask() {
return imageMask;
}
public void setDepth(final int depth) {
this.depth = depth;
}
public void setWidth(final int width) {
this.width = width;
}
public void setHeight(final int height) {
this.height = height;
}
public byte[] getObjectData() {
return objectData;
}
/**
* Get the object data as 8 bit per component
*
* @return byte array of the object data with each component value uses 8 bit
*/
public byte[] getObjectDataAs8Bit() {
switch (depth) {
case 1 :
final int size = objectData.length;
final byte[] newData = new byte[size * 8];
int ptr = 0;
for (int a = 0; a < size; a++) {
for (int bit = 7; bit >= 0; bit--) {
if (((objectData[a] >> bit) & 1) == 1) {
newData[ptr] = (byte) 255;
} else {
newData[ptr] = (byte) 0;
}
ptr++;
//If at end of width, rest of byte is passing.
if (ptr % width == 0) {
break;
}
}
}
return newData;
default :
return objectData;
}
}
public void setObjectData(final byte[] objectData) {
this.objectData = objectData;
}
public void setpX(final int pX) {
this.pX = pX;
}
public void setpY(final int pY) {
this.pY = pY;
}
public int getpX() {
return pX;
}
public int getpY() {
return pY;
}
public void swapValues() {
final int temp = pX;
pX = pY;
pY = temp;
}
public boolean isJPX() {
return isJPX;
}
public void setDCT(final boolean isDCT) {
this.isDCT = isDCT;
}
public boolean isDCT() {
return isDCT;
}
public boolean isJBIG() {
return isJBIG;
}
public PdfArrayIterator getFilter(final PdfObject XObject) {
PdfArrayIterator Filters = XObject.getMixedArray(PdfDictionary.Filter);
//check not handled elsewhere
int firstValue;
if (Filters != null && Filters.hasMoreTokens()) {
while (Filters.hasMoreTokens()) {
firstValue = Filters.getNextValueAsConstant(true);
isDCT = firstValue == PdfFilteredReader.DCTDecode;
isJPX = firstValue == PdfFilteredReader.JPXDecode;
isJBIG = firstValue == PdfFilteredReader.JBIG2Decode;
}
} else {
Filters = null;
}
decodeArray = XObject.getFloatArray(PdfDictionary.Decode);
return Filters;
}
public void setCompCount(final int numComponents) {
this.numComponents = numComponents;
}
public int getCompCount() {
return numComponents;
}
/**
* @return if image was removed
*/
public boolean isRemoved() {
return removed;
}
/**
*/
public void setRemoved(final boolean removed) {
this.removed = removed;
}
public int getRawDepth() {
return rawDepth;
}
public void setIsJPX(final boolean b) {
isJPX = b;
}
public void setIsDCT(final boolean b) {
isDCT = b;
}
public boolean wasDCT() {
return wasDCT;
}
public void wasDCT(final boolean b) {
wasDCT = b;
}
public void setDecodeArray(final float[] value) {
decodeArray = value;
}
public float[] getDecodeArray() {
return decodeArray;
}
/**
* @param rawType
*/
public void setImageType(final PdfImageTypes rawType) {
this.rawType = rawType;
}
/**
*
*/
public PdfImageTypes getImageType() {
return rawType;
}
public void setIsConvertedToARGB(final boolean b) {
isConvertedToARGB = b;
}
public boolean isConvertedToARGB() {
return isConvertedToARGB;
}
}