ResolutionSyntaxpublic abstract class ResolutionSyntax extends Object implements Serializable, CloneableClass ResolutionSyntax is an abstract base class providing the common
implementation of all attributes denoting a printer resolution.
A resolution attribute's value consists of two items, the cross feed
direction resolution and the feed direction resolution. A resolution
attribute may be constructed by supplying the two values and indicating the
units in which the values are measured. Methods are provided to return a
resolution attribute's values, indicating the units in which the values are
to be returned. The two most common resolution units are dots per inch (dpi)
and dots per centimeter (dpcm), and exported constants {@link #DPI
DPI } and {@link #DPCM DPCM } are provided for
indicating those units.
Once constructed, a resolution attribute's value is immutable.
Design
A resolution attribute's cross feed direction resolution and feed direction
resolution values are stored internally using units of dots per 100 inches
(dphi). Storing the values in dphi rather than, say, metric units allows
precise integer arithmetic conversions between dpi and dphi and between dpcm
and dphi: 1 dpi = 100 dphi, 1 dpcm = 254 dphi. Thus, the values can be stored
into and retrieved back from a resolution attribute in either units with no
loss of precision. This would not be guaranteed if a floating point
representation were used. However, roundoff error will in general occur if a
resolution attribute's values are created in one units and retrieved in
different units; for example, 600 dpi will be rounded to 236 dpcm, whereas
the true value (to five figures) is 236.22 dpcm.
Storing the values internally in common units of dphi lets two resolution
attributes be compared without regard to the units in which they were
created; for example, 300 dpcm will compare equal to 762 dpi, as they both
are stored as 76200 dphi. In particular, a lookup service can
match resolution attributes based on equality of their serialized
representations regardless of the units in which they were created. Again,
using integers for internal storage allows precise equality comparisons to be
done, which would not be guaranteed if a floating point representation were
used.
The exported constant {@link #DPI DPI } is actually the
conversion factor by which to multiply a value in dpi to get the value in
dphi. Likewise, the exported constant {@link #DPCM DPCM } is the
conversion factor by which to multiply a value in dpcm to get the value in
dphi. A client can specify a resolution value in units other than dpi or dpcm
by supplying its own conversion factor. However, since the internal units of
dphi was chosen with supporting only the external units of dpi and dpcm in
mind, there is no guarantee that the conversion factor for the client's units
will be an exact integer. If the conversion factor isn't an exact integer,
resolution values in the client's units won't be stored precisely.
|
Fields Summary |
---|
private static final long | serialVersionUID | private int | crossFeedResolutionCross feed direction resolution in units of dots per 100 inches (dphi). | private int | feedResolutionFeed direction resolution in units of dots per 100 inches (dphi). | public static final int | DPIValue to indicate units of dots per inch (dpi). It is actually the
conversion factor by which to multiply dpi to yield dphi (100). | public static final int | DPCMValue to indicate units of dots per centimeter (dpcm). It is actually
the conversion factor by which to multiply dpcm to yield dphi (254). |
Constructors Summary |
---|
public ResolutionSyntax(int crossFeedResolution, int feedResolution, int units)Construct a new resolution attribute from the given items.
if (crossFeedResolution < 1) {
throw new IllegalArgumentException("crossFeedResolution is < 1");
}
if (feedResolution < 1) {
throw new IllegalArgumentException("feedResolution is < 1");
}
if (units < 1) {
throw new IllegalArgumentException("units is < 1");
}
this.crossFeedResolution = crossFeedResolution * units;
this.feedResolution = feedResolution * units;
|
Methods Summary |
---|
private static int | convertFromDphi(int dphi, int units)Convert a value from dphi to some other units. The result is rounded to
the nearest integer.
if (units < 1) {
throw new IllegalArgumentException(": units is < 1");
}
int round = units / 2;
return (dphi + round) / units;
| public boolean | equals(java.lang.Object object)Returns whether this resolution attribute is equivalent to the passed in
object. To be equivalent, all of the following conditions must be true:
-
object is not null.
-
object is an instance of class ResolutionSyntax.
-
This attribute's cross feed direction resolution is equal to
object 's cross feed direction resolution.
-
This attribute's feed direction resolution is equal to
object 's feed direction resolution.
return(object != null &&
object instanceof ResolutionSyntax &&
this.crossFeedResolution ==
((ResolutionSyntax) object).crossFeedResolution &&
this.feedResolution ==
((ResolutionSyntax) object).feedResolution);
| public int | getCrossFeedResolution(int units)Returns this resolution attribute's cross feed direction resolution in
the given units. The value is rounded to the nearest integer.
return convertFromDphi (crossFeedResolution, units);
| protected int | getCrossFeedResolutionDphi()Returns this resolution attribute's cross feed direction resolution in
units of dphi. (For use in a subclass.)
return crossFeedResolution;
| public int | getFeedResolution(int units)Returns this resolution attribute's feed direction resolution in the
given units. The value is rounded to the nearest integer.
return convertFromDphi (feedResolution, units);
| protected int | getFeedResolutionDphi()Returns this resolution attribute's feed direction resolution in units
of dphi. (For use in a subclass.)
return feedResolution;
| public int[] | getResolution(int units)Get this resolution attribute's resolution values in the given units.
The values are rounded to the nearest integer.
return new int[] { getCrossFeedResolution(units),
getFeedResolution(units)
};
| public int | hashCode()Returns a hash code value for this resolution attribute.
return(((crossFeedResolution & 0x0000FFFF)) |
((feedResolution & 0x0000FFFF) << 16));
| public boolean | lessThanOrEquals(javax.print.attribute.ResolutionSyntax other)Determine whether this resolution attribute's value is less than or
equal to the given resolution attribute's value. This is true if all
of the following conditions are true:
-
This attribute's cross feed direction resolution is less than or equal to
the
other attribute's cross feed direction resolution.
-
This attribute's feed direction resolution is less than or equal to the
other attribute's feed direction resolution.
return (this.crossFeedResolution <= other.crossFeedResolution &&
this.feedResolution <= other.feedResolution);
| public java.lang.String | toString()Returns a string version of this resolution attribute. The string takes
the form "CxF dphi" , where C is the
cross feed direction resolution and F is the feed direction
resolution. The values are reported in the internal units of dphi.
StringBuffer result = new StringBuffer();
result.append(crossFeedResolution);
result.append('x");
result.append(feedResolution);
result.append(" dphi");
return result.toString();
| public java.lang.String | toString(int units, java.lang.String unitsName)Returns a string version of this resolution attribute in the given units.
The string takes the form "CxF U" ,
where C is the cross feed direction resolution, F is the
feed direction resolution, and U is the units name. The values are
rounded to the nearest integer.
StringBuffer result = new StringBuffer();
result.append(getCrossFeedResolution (units));
result.append('x");
result.append(getFeedResolution (units));
if (unitsName != null) {
result.append (' ");
result.append (unitsName);
}
return result.toString();
|
|