| 1 7 8 package javax.imageio; 9 10 import java.awt.Dimension ; 11 import java.awt.Rectangle ; 12 import java.awt.image.BufferedImage ; 13 import java.awt.image.RenderedImage ; 14 import java.awt.image.Raster ; 15 import java.io.IOException ; 16 import java.util.ArrayList ; 17 import java.util.List ; 18 import java.util.Locale ; 19 import java.util.MissingResourceException ; 20 import java.util.ResourceBundle ; 21 import javax.imageio.event.IIOWriteWarningListener ; 22 import javax.imageio.event.IIOWriteProgressListener ; 23 import javax.imageio.metadata.IIOMetadata ; 24 import javax.imageio.stream.ImageOutputStream ; 25 import javax.imageio.spi.ImageWriterSpi ; 26 27 47 public abstract class ImageWriter implements ImageTranscoder { 48 49 54 protected ImageWriterSpi originatingProvider = null; 55 56 62 protected Object output = null; 63 64 70 protected Locale [] availableLocales = null; 71 72 77 protected Locale locale = null; 78 79 85 protected List <IIOWriteWarningListener > warningListeners = null; 86 87 93 protected List <Locale > warningLocales = null; 94 95 101 protected List <IIOWriteProgressListener > progressListeners = null; 102 103 107 private boolean abortFlag = false; 108 109 123 protected ImageWriter(ImageWriterSpi originatingProvider) { 124 this.originatingProvider = originatingProvider; 125 } 126 127 139 public ImageWriterSpi getOriginatingProvider() { 140 return originatingProvider; 141 } 142 143 189 public void setOutput(Object output) { 190 if (output != null) { 191 ImageWriterSpi provider = getOriginatingProvider(); 192 if (provider != null) { 193 Class [] classes = provider.getOutputTypes(); 194 boolean found = false; 195 for (int i = 0; i < classes.length; i++) { 196 if (classes[i].isInstance(output)) { 197 found = true; 198 break; 199 } 200 } 201 if (!found) { 202 throw new IllegalArgumentException ("Illegal output type!"); 203 } 204 } 205 } 206 207 this.output = output; 208 } 209 210 224 public Object getOutput() { 225 return output; 226 } 227 228 230 243 public Locale [] getAvailableLocales() { 244 return (availableLocales == null) ? 245 null : (Locale [])availableLocales.clone(); 246 } 247 248 270 public void setLocale(Locale locale) { 271 if (locale != null) { 272 Locale [] locales = getAvailableLocales(); 273 boolean found = false; 274 if (locales != null) { 275 for (int i = 0; i < locales.length; i++) { 276 if (locale.equals(locales[i])) { 277 found = true; 278 break; 279 } 280 } 281 } 282 if (!found) { 283 throw new IllegalArgumentException ("Invalid locale!"); 284 } 285 } 286 this.locale = locale; 287 } 288 289 300 public Locale getLocale() { 301 return locale; 302 } 303 304 306 329 public ImageWriteParam getDefaultWriteParam() { 330 return new ImageWriteParam (getLocale()); 331 } 332 333 335 363 public abstract IIOMetadata  364 getDefaultStreamMetadata(ImageWriteParam param); 365 366 392 public abstract IIOMetadata  393 getDefaultImageMetadata(ImageTypeSpecifier imageType, 394 ImageWriteParam param); 395 396 public abstract IIOMetadata convertStreamMetadata(IIOMetadata inData, 398 ImageWriteParam param); 399 400 public abstract IIOMetadata  402 convertImageMetadata(IIOMetadata inData, 403 ImageTypeSpecifier imageType, 404 ImageWriteParam param); 405 406 408 438 public int getNumThumbnailsSupported(ImageTypeSpecifier imageType, 439 ImageWriteParam param, 440 IIOMetadata streamMetadata, 441 IIOMetadata imageMetadata) { 442 return 0; 443 } 444 445 482 public Dimension [] getPreferredThumbnailSizes(ImageTypeSpecifier imageType, 483 ImageWriteParam param, 484 IIOMetadata streamMetadata, 485 IIOMetadata imageMetadata) { 486 return null; 487 } 488 489 503 public boolean canWriteRasters() { 504 return false; 505 } 506 507 558 public abstract void write(IIOMetadata streamMetadata, 559 IIOImage image, 560 ImageWriteParam param) throws IOException ; 561 562 579 public void write(IIOImage image) throws IOException { 580 write(null, image, null); 581 } 582 583 597 public void write(RenderedImage image) throws IOException { 598 write(null, new IIOImage (image, null, null), null); 599 } 600 601 private void unsupported() { 604 if (getOutput() == null) { 605 throw new IllegalStateException ("getOutput() == null!"); 606 } 607 throw new UnsupportedOperationException ("Unsupported write variant!"); 608 } 609 610 612 625 public boolean canWriteSequence() { 626 return false; 627 } 628 629 666 public void prepareWriteSequence(IIOMetadata streamMetadata) 667 throws IOException { 668 unsupported(); 669 } 670 671 731 public void writeToSequence(IIOImage image, ImageWriteParam param) 732 throws IOException { 733 unsupported(); 734 } 735 736 761 public void endWriteSequence() throws IOException { 762 unsupported(); 763 } 764 765 767 782 public boolean canReplaceStreamMetadata() throws IOException { 783 if (getOutput() == null) { 784 throw new IllegalStateException ("getOutput() == null!"); 785 } 786 return false; 787 } 788 789 816 public void replaceStreamMetadata(IIOMetadata streamMetadata) 817 throws IOException { 818 unsupported(); 819 } 820 821 852 public boolean canReplaceImageMetadata(int imageIndex) 853 throws IOException { 854 if (getOutput() == null) { 855 throw new IllegalStateException ("getOutput() == null!"); 856 } 857 return false; 858 } 859 860 886 public void replaceImageMetadata(int imageIndex, 887 IIOMetadata imageMetadata) 888 throws IOException { 889 unsupported(); 890 } 891 892 894 |