1
2 package org.freehep.graphicsio.gif;
3
4 import java.awt.image.BufferedImage;
5 import java.awt.image.RenderedImage;
6 import java.io.IOException;
7
8 import javax.imageio.IIOImage;
9 import javax.imageio.ImageTypeSpecifier;
10 import javax.imageio.ImageWriteParam;
11 import javax.imageio.ImageWriter;
12 import javax.imageio.metadata.IIOMetadata;
13 import javax.imageio.stream.ImageOutputStream;
14
15
16
17
18
19 public class GIFImageWriter extends ImageWriter {
20
21 public GIFImageWriter(GIFImageWriterSpi originatingProvider) {
22 super(originatingProvider);
23 }
24
25 public void write(IIOMetadata streamMetadata, IIOImage image,
26 ImageWriteParam param) throws IOException {
27 if (image == null)
28 throw new IllegalArgumentException("image == null");
29
30 if (image.hasRaster())
31 throw new UnsupportedOperationException("Cannot write rasters");
32
33 Object output = getOutput();
34 if (output == null)
35 throw new IllegalStateException("output was not set");
36
37 if (param == null)
38 param = getDefaultWriteParam();
39
40 ImageOutputStream ios = (ImageOutputStream) output;
41 RenderedImage ri = image.getRenderedImage();
42
43 if (ri instanceof BufferedImage) {
44 BufferedImage bi = (BufferedImage) ri;
45 boolean interlaced = param.getProgressiveMode() != ImageWriteParam.MODE_DISABLED;
46 GIFEncoder encoder = new GIFEncoder(bi, ios, interlaced);
47 encoder.encode();
48 } else {
49 throw new IOException("Image not of type BufferedImage");
50 }
51 }
52
53 public IIOMetadata convertStreamMetadata(IIOMetadata inData,
54 ImageWriteParam param) {
55 return null;
56 }
57
58 public IIOMetadata convertImageMetadata(IIOMetadata inData,
59 ImageTypeSpecifier imageType, ImageWriteParam param) {
60 return null;
61 }
62
63 public IIOMetadata getDefaultImageMetadata(ImageTypeSpecifier imageType,
64 ImageWriteParam param) {
65 return null;
66 }
67
68 public IIOMetadata getDefaultStreamMetadata(ImageWriteParam param) {
69 return null;
70 }
71
72 public ImageWriteParam getDefaultWriteParam() {
73 return new GIFImageWriteParam(getLocale());
74 }
75 }