1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.imaging.roundtrip;
18
19 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
20 import static org.junit.jupiter.api.Assertions.assertNotNull;
21
22 import java.awt.image.BufferedImage;
23 import java.io.ByteArrayOutputStream;
24 import java.io.IOException;
25 import java.util.stream.Stream;
26
27 import org.apache.commons.imaging.AbstractImageParser;
28 import org.apache.commons.imaging.ImagingException;
29 import org.apache.commons.imaging.ImagingParameters;
30 import org.apache.commons.imaging.common.RgbBufferedImageFactory;
31 import org.apache.commons.imaging.internal.ImageParserFactory;
32 import org.junit.jupiter.params.provider.Arguments;
33
34 public class RoundtripBase {
35
36 public static Stream<Arguments> createRoundtripArguments(final BufferedImage[] images) {
37 return Stream.of(images).flatMap(i -> Stream.of(FormatInfo.READ_WRITE_FORMATS).map(f -> Arguments.of(i, f)));
38 }
39
40 protected void roundtrip(final FormatInfo formatInfo, final BufferedImage testImage, final String tempPrefix, final boolean imageExact)
41 throws IOException, ImagingException, ImagingException {
42
43 final AbstractImageParser abstractImageParser = ImageParserFactory.getImageParser(formatInfo.format);
44
45 final ImagingParameters params = ImageParserFactory.getImageParser(formatInfo.format).getDefaultParameters();
46 byte[] temp1;
47 try (ByteArrayOutputStream bos = new ByteArrayOutputStream()) {
48 abstractImageParser.writeImage(testImage, bos, params);
49 temp1 = bos.toByteArray();
50 }
51
52 final ImagingParameters readParams = ImageParserFactory.getImageParser(formatInfo.format).getDefaultParameters();
53 readParams.setBufferedImageFactory(new RgbBufferedImageFactory());
54 final BufferedImage image2 = abstractImageParser.getBufferedImage(temp1, readParams);
55 assertNotNull(image2);
56
57 if (imageExact) {
58
59
60 ImageAsserts.assertImageEquals(testImage, image2);
61 }
62
63 if (formatInfo.identicalSecondWrite) {
64 byte[] temp2;
65 try (ByteArrayOutputStream bos = new ByteArrayOutputStream()) {
66 abstractImageParser.writeImage(image2, bos, params);
67 temp2 = bos.toByteArray();
68 }
69
70 assertArrayEquals(temp1, temp2);
71 }
72 }
73 }