1. /*
  2. * @(#)BMPImageWriterSpi.java 1.3 04/05/05 05:42:00
  3. *
  4. * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
  5. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
  6. */
  7. package com.sun.imageio.plugins.bmp;
  8. import java.awt.image.DataBuffer;
  9. import java.awt.image.SampleModel;
  10. import java.awt.image.SinglePixelPackedSampleModel;
  11. import javax.imageio.spi.ImageWriterSpi;
  12. import javax.imageio.spi.ServiceRegistry;
  13. import javax.imageio.spi.IIORegistry;
  14. import javax.imageio.ImageWriter;
  15. import javax.imageio.ImageTypeSpecifier;
  16. import javax.imageio.IIOException;
  17. import java.util.Locale;
  18. import javax.imageio.plugins.bmp.BMPImageWriteParam;
  19. public class BMPImageWriterSpi extends ImageWriterSpi {
  20. private static String [] readerSpiNames =
  21. {"com.sun.imageio.plugins.bmp.BMPImageReaderSpi"};
  22. private static String[] formatNames = {"bmp", "BMP"};
  23. private static String[] entensions = {"bmp"};
  24. private static String[] mimeType = {"image/bmp"};
  25. private boolean registered = false;
  26. public BMPImageWriterSpi() {
  27. super("Sun Microsystems, Inc.",
  28. "1.0",
  29. formatNames,
  30. entensions,
  31. mimeType,
  32. "com.sun.imageio.plugins.bmp.BMPImageWriter",
  33. STANDARD_OUTPUT_TYPE,
  34. readerSpiNames,
  35. false,
  36. null, null, null, null,
  37. true,
  38. BMPMetadata.nativeMetadataFormatName,
  39. "com.sun.imageio.plugins.bmp.BMPMetadataFormat",
  40. null, null);
  41. }
  42. public String getDescription(Locale locale) {
  43. return "Standard BMP Image Writer";
  44. }
  45. public void onRegistration(ServiceRegistry registry,
  46. Class<?> category) {
  47. if (registered) {
  48. return;
  49. }
  50. registered = true;
  51. }
  52. public boolean canEncodeImage(ImageTypeSpecifier type) {
  53. int dataType= type.getSampleModel().getDataType();
  54. if (dataType < DataBuffer.TYPE_BYTE || dataType > DataBuffer.TYPE_INT)
  55. return false;
  56. SampleModel sm = type.getSampleModel();
  57. int numBands = sm.getNumBands();
  58. if (!(numBands == 1 || numBands == 3))
  59. return false;
  60. if (numBands == 1 && dataType != DataBuffer.TYPE_BYTE)
  61. return false;
  62. if (dataType > DataBuffer.TYPE_BYTE &&
  63. !(sm instanceof SinglePixelPackedSampleModel))
  64. return false;
  65. return true;
  66. }
  67. public ImageWriter createWriterInstance(Object extension)
  68. throws IIOException {
  69. return new BMPImageWriter(this);
  70. }
  71. }