1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.imaging.formats.pnm;
18
19 import java.awt.image.BufferedImage;
20 import java.io.IOException;
21 import java.io.OutputStream;
22 import java.nio.charset.StandardCharsets;
23
24 import org.apache.commons.imaging.ImagingException;
25
26 final class PpmWriter implements PnmWriter {
27
28 private final boolean rawbits;
29
30 PpmWriter(final boolean rawbits) {
31 this.rawbits = rawbits;
32 }
33
34 @Override
35 public void writeImage(final BufferedImage src, final OutputStream os, final PnmImagingParameters params) throws ImagingException, IOException {
36
37
38 os.write(0x50);
39 os.write(rawbits ? 0x36 : 0x33);
40 os.write(PnmConstants.PNM_SEPARATOR);
41
42 final int width = src.getWidth();
43 final int height = src.getHeight();
44
45 os.write(Integer.toString(width).getBytes(StandardCharsets.US_ASCII));
46 os.write(PnmConstants.PNM_SEPARATOR);
47
48 os.write(Integer.toString(height).getBytes(StandardCharsets.US_ASCII));
49 os.write(PnmConstants.PNM_SEPARATOR);
50
51 os.write(Integer.toString(255).getBytes(StandardCharsets.US_ASCII));
52 os.write(PnmConstants.PNM_NEWLINE);
53
54 for (int y = 0; y < height; y++) {
55 for (int x = 0; x < width; x++) {
56 final int argb = src.getRGB(x, y);
57 final int red = 0xff & argb >> 16;
58 final int green = 0xff & argb >> 8;
59 final int blue = 0xff & argb >> 0;
60
61 if (rawbits) {
62 os.write((byte) red);
63 os.write((byte) green);
64 os.write((byte) blue);
65 } else {
66 os.write(Integer.toString(red).getBytes(StandardCharsets.US_ASCII));
67
68 os.write(PnmConstants.PNM_SEPARATOR);
69 os.write(Integer.toString(green).getBytes(StandardCharsets.US_ASCII));
70
71
72 os.write(PnmConstants.PNM_SEPARATOR);
73 os.write(Integer.toString(blue).getBytes(StandardCharsets.US_ASCII));
74
75 os.write(PnmConstants.PNM_SEPARATOR);
76 }
77 }
78 }
79 }
80 }