1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.imaging.formats.tiff.fieldtypes;
18
19 import java.nio.ByteOrder;
20 import java.util.Arrays;
21
22 import org.apache.commons.imaging.ImagingException;
23 import org.apache.commons.imaging.common.Allocator;
24 import org.apache.commons.imaging.common.ByteConversions;
25 import org.apache.commons.imaging.formats.tiff.TiffField;
26
27 public class FieldTypeDouble extends AbstractFieldType {
28 public FieldTypeDouble(final int type, final String name) {
29 super(type, name, 8);
30 }
31
32 @Override
33 public Object getValue(final TiffField entry) {
34 final byte[] bytes = entry.getByteArrayValue();
35 if (entry.getCount() == 1) {
36 return ByteConversions.toDouble(bytes, entry.getByteOrder());
37 }
38 return ByteConversions.toDoubles(bytes, entry.getByteOrder());
39 }
40
41 @Override
42 public byte[] writeData(final Object o, final ByteOrder byteOrder) throws ImagingException {
43 if (o instanceof Double) {
44 return ByteConversions.toBytes(((Double) o).doubleValue(), byteOrder);
45 }
46 if (o instanceof double[]) {
47 return ByteConversions.toBytes((double[]) o, byteOrder);
48 }
49 if (!(o instanceof Double[])) {
50 throw new ImagingException("Invalid data", o);
51 }
52 final double[] values = Allocator.doubleArray(((Double[]) o).length);
53 Arrays.setAll(values, i -> ((Double[]) o)[i].doubleValue());
54 return ByteConversions.toBytes(values, byteOrder);
55 }
56
57 }