Package org.apache.pdfbox.jbig2.image
Class Resizer
- java.lang.Object
-
- org.apache.pdfbox.jbig2.image.Resizer
-
class Resizer extends java.lang.Object
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) static class
Resizer.Mapping
private static class
Resizer.Order
Order in which to apply filter
-
Field Summary
Fields Modifier and Type Field Description private int[]
bitsPerChannel
Number of bits per channelprivate boolean
coerce
Should filters be simplified if possible?(package private) static boolean
debug
private static double
EPSILON
Error toleranceprivate int[]
finalShift
private Resizer.Mapping
mappingX
private Resizer.Mapping
mappingY
private static int[]
NO_SHIFT
private Resizer.Order
order
The order in which data is processed.private boolean
trimZeros
Should zeros be trimmed in x filter weight tables?private int
weightBits
Number of bits in filter coefficientsprivate int
weightOne
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private static Scanline
createScanline(java.lang.Object src, java.lang.Object dst, int length)
private Weighttab[]
createXWeights(java.awt.Rectangle srcBounds, java.awt.Rectangle dstBounds, ParameterizedFilter filter)
private static boolean
isInteger(double x)
Is x an integer?void
resize(java.lang.Object src, java.awt.Rectangle srcBounds, java.lang.Object dst, java.awt.Rectangle dstBounds, Filter xFilter, Filter yFilter)
private void
resizeXfirst(java.lang.Object src, java.awt.Rectangle srcBounds, java.lang.Object dst, java.awt.Rectangle dstBounds, ParameterizedFilter xFilter, ParameterizedFilter yFilter)
Filtered zoom, x direction filtering before y direction filteringprivate void
resizeYfirst(java.lang.Object src, java.awt.Rectangle srcBounds, java.lang.Object dst, java.awt.Rectangle dstBounds, ParameterizedFilter xFilter, ParameterizedFilter yFilter)
Filtered zoom, y direction filtering before x direction filteringprivate ParameterizedFilter
simplifyFilter(ParameterizedFilter filter, double scale, double offset)
Checks if our discrete sampling of an arbitrary continuous filter, parameterized by the filter spacing (ParameterizedFilter.scale
), its radius (ParameterizedFilter.support
), and the scale and offset of the coordinate mapping, causes the filter to reduce to point sampling.
-
-
-
Field Detail
-
EPSILON
private static final double EPSILON
Error tolerance- See Also:
- Constant Field Values
-
weightBits
private int weightBits
Number of bits in filter coefficients
-
weightOne
private int weightOne
-
bitsPerChannel
private int[] bitsPerChannel
Number of bits per channel
-
NO_SHIFT
private static final int[] NO_SHIFT
-
finalShift
private int[] finalShift
-
debug
static final boolean debug
- See Also:
- Constant Field Values
-
coerce
private final boolean coerce
Should filters be simplified if possible?- See Also:
- Constant Field Values
-
order
private final Resizer.Order order
The order in which data is processed.- See Also:
Resizer.Order
-
trimZeros
private final boolean trimZeros
Should zeros be trimmed in x filter weight tables?- See Also:
- Constant Field Values
-
mappingX
private final Resizer.Mapping mappingX
-
mappingY
private final Resizer.Mapping mappingY
-
-
Constructor Detail
-
Resizer
public Resizer(double scale)
Creates an instance ofResizer
with one scale factor for both x and y directions.- Parameters:
scale
- the scale factor for x and y direction
-
Resizer
public Resizer(double scaleX, double scaleY)
Creates an instance ofResizer
with a scale factor for each direction.- Parameters:
scaleX
- the scale factor for x directionscaleY
- the scale factor for y direction
-
-
Method Detail
-
isInteger
private static boolean isInteger(double x)
Is x an integer?- Parameters:
x
- the double to check- Returns:
true
if x is an integer,false
if not.
-
createXWeights
private Weighttab[] createXWeights(java.awt.Rectangle srcBounds, java.awt.Rectangle dstBounds, ParameterizedFilter filter)
-
simplifyFilter
private ParameterizedFilter simplifyFilter(ParameterizedFilter filter, double scale, double offset)
Checks if our discrete sampling of an arbitrary continuous filter, parameterized by the filter spacing (ParameterizedFilter.scale
), its radius (ParameterizedFilter.support
), and the scale and offset of the coordinate mapping, causes the filter to reduce to point sampling.It reduces if support is less than 1 pixel or if integer scale and translation, and filter is cardinal.
- Parameters:
filter
- the parameterized filter instance to be simplifiedscale
- the scale of the coordinate mappingoffset
- the offset of the coordinate mapping
-
resizeXfirst
private void resizeXfirst(java.lang.Object src, java.awt.Rectangle srcBounds, java.lang.Object dst, java.awt.Rectangle dstBounds, ParameterizedFilter xFilter, ParameterizedFilter yFilter)
Filtered zoom, x direction filtering before y direction filteringNote: when calling
createXWeights(Rectangle, Rectangle, ParameterizedFilter)
, we can trim leading and trailing zeros from the x weight buffers as an optimization, but not for y weight buffers since the split formula is anticipating a constant amount of buffering of source scanlines; trimming zeros in y weight could cause feedback.
-
resizeYfirst
private void resizeYfirst(java.lang.Object src, java.awt.Rectangle srcBounds, java.lang.Object dst, java.awt.Rectangle dstBounds, ParameterizedFilter xFilter, ParameterizedFilter yFilter)
Filtered zoom, y direction filtering before x direction filtering
-
resize
public void resize(java.lang.Object src, java.awt.Rectangle srcBounds, java.lang.Object dst, java.awt.Rectangle dstBounds, Filter xFilter, Filter yFilter)
- Parameters:
src
- Source objectsrcBounds
- Bounds of the source objectdst
- Destination objectdstBounds
- Bounds of the destination objectxFilter
- The filter used for x direction filteringyFilter
- The filter used for y direction filtering
-
createScanline
private static Scanline createScanline(java.lang.Object src, java.lang.Object dst, int length)
-
-