in src/main/java/org/apache/xmlgraphics/image/codec/tiff/TIFFImageEncoder.java [1175:1256]
private void writeValues(TIFFField field) throws IOException {
int dataType = field.getType();
int count = field.getCount();
switch (dataType) {
// unsigned 8 bits
case TIFFField.TIFF_BYTE:
case TIFFField.TIFF_SBYTE:
case TIFFField.TIFF_UNDEFINED:
byte[] bytes = field.getAsBytes();
for (int i = 0; i < count; i++) {
output.write(bytes[i]);
}
break;
// unsigned 16 bits
case TIFFField.TIFF_SHORT:
char[] chars = field.getAsChars();
for (int i = 0; i < count; i++) {
writeUnsignedShort(chars[i]);
}
break;
case TIFFField.TIFF_SSHORT:
short[] shorts = field.getAsShorts();
for (int i = 0; i < count; i++) {
writeUnsignedShort(shorts[i]);
}
break;
// unsigned 32 bits
case TIFFField.TIFF_LONG:
case TIFFField.TIFF_SLONG:
long[] longs = field.getAsLongs();
for (int i = 0; i < count; i++) {
writeLong(longs[i]);
}
break;
case TIFFField.TIFF_FLOAT:
float[] floats = field.getAsFloats();
for (int i = 0; i < count; i++) {
int intBits = Float.floatToIntBits(floats[i]);
writeLong(intBits);
}
break;
case TIFFField.TIFF_DOUBLE:
double[] doubles = field.getAsDoubles();
for (int i = 0; i < count; i++) {
long longBits = Double.doubleToLongBits(doubles[i]);
writeLong(longBits >>> 32); // write upper 32 bits
writeLong(longBits & 0xffffffffL); // write lower 32 bits
}
break;
case TIFFField.TIFF_RATIONAL:
case TIFFField.TIFF_SRATIONAL:
long[][] rationals = field.getAsRationals();
for (int i = 0; i < count; i++) {
writeLong(rationals[i][0]);
writeLong(rationals[i][1]);
}
break;
case TIFFField.TIFF_ASCII:
for (int i = 0; i < count; i++) {
byte[] stringBytes = field.getAsString(i).getBytes(StandardCharsets.UTF_8);
output.write(stringBytes);
if (stringBytes[stringBytes.length - 1] != (byte)0) {
output.write((byte)0);
}
}
break;
default:
throw new RuntimeException(PropertyUtil.getString("TIFFImageEncoder10"));
}
}