1. /*
  2. * @(#)BMPMetadataFormat.java 1.3 04/03/19 12:28:41
  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.util.Arrays;
  9. import javax.imageio.ImageTypeSpecifier;
  10. import javax.imageio.metadata.IIOMetadataFormat;
  11. import javax.imageio.metadata.IIOMetadataFormatImpl;
  12. public class BMPMetadataFormat extends IIOMetadataFormatImpl {
  13. private static IIOMetadataFormat instance = null;
  14. private BMPMetadataFormat() {
  15. super(BMPMetadata.nativeMetadataFormatName,
  16. CHILD_POLICY_SOME);
  17. // root -> ImageDescriptor
  18. addElement("ImageDescriptor",
  19. BMPMetadata.nativeMetadataFormatName,
  20. CHILD_POLICY_EMPTY);
  21. addAttribute("ImageDescriptor", "bmpVersion",
  22. DATATYPE_STRING, true, null);
  23. addAttribute("ImageDescriptor", "width",
  24. DATATYPE_INTEGER, true, null,
  25. "0", "65535", true, true);
  26. addAttribute("ImageDescriptor", "height",
  27. DATATYPE_INTEGER, true, null,
  28. "1", "65535", true, true);
  29. addAttribute("ImageDescriptor", "bitsPerPixel",
  30. DATATYPE_INTEGER, true, null,
  31. "1", "65535", true, true);
  32. addAttribute("ImageDescriptor", "compression",
  33. DATATYPE_INTEGER, false, null);
  34. addAttribute("ImageDescriptor", "imageSize",
  35. DATATYPE_INTEGER, true, null,
  36. "1", "65535", true, true);
  37. addElement("PixelsPerMeter",
  38. BMPMetadata.nativeMetadataFormatName,
  39. CHILD_POLICY_EMPTY);
  40. addAttribute("PixelsPerMeter", "X",
  41. DATATYPE_INTEGER, false, null,
  42. "1", "65535", true, true);
  43. addAttribute("PixelsPerMeter", "Y",
  44. DATATYPE_INTEGER, false, null,
  45. "1", "65535", true, true);
  46. addElement("ColorsUsed",
  47. BMPMetadata.nativeMetadataFormatName,
  48. CHILD_POLICY_EMPTY);
  49. addAttribute("ColorsUsed", "value",
  50. DATATYPE_INTEGER, true, null,
  51. "0", "65535", true, true);
  52. addElement("ColorsImportant",
  53. BMPMetadata.nativeMetadataFormatName,
  54. CHILD_POLICY_EMPTY);
  55. addAttribute("ColorsImportant", "value",
  56. DATATYPE_INTEGER, false, null,
  57. "0", "65535", true, true);
  58. addElement("BI_BITFIELDS_Mask",
  59. BMPMetadata.nativeMetadataFormatName,
  60. CHILD_POLICY_EMPTY);
  61. addAttribute("BI_BITFIELDS_Mask", "red",
  62. DATATYPE_INTEGER, false, null,
  63. "0", "65535", true, true);
  64. addAttribute("BI_BITFIELDS_Mask", "green",
  65. DATATYPE_INTEGER, false, null,
  66. "0", "65535", true, true);
  67. addAttribute("BI_BITFIELDS_Mask", "blue",
  68. DATATYPE_INTEGER, false, null,
  69. "0", "65535", true, true);
  70. addElement("ColorSpace",
  71. BMPMetadata.nativeMetadataFormatName,
  72. CHILD_POLICY_EMPTY);
  73. addAttribute("ColorSpace", "value",
  74. DATATYPE_INTEGER, false, null,
  75. "0", "65535", true, true);
  76. addElement("LCS_CALIBRATED_RGB",
  77. BMPMetadata.nativeMetadataFormatName,
  78. CHILD_POLICY_EMPTY);
  79. /// Should the max value be 1.7976931348623157e+308 ?
  80. addAttribute("LCS_CALIBRATED_RGB", "redX",
  81. DATATYPE_DOUBLE, false, null,
  82. "0", "65535", true, true);
  83. addAttribute("LCS_CALIBRATED_RGB", "redY",
  84. DATATYPE_DOUBLE, false, null,
  85. "0", "65535", true, true);
  86. addAttribute("LCS_CALIBRATED_RGB", "redZ",
  87. DATATYPE_DOUBLE, false, null,
  88. "0", "65535", true, true);
  89. addAttribute("LCS_CALIBRATED_RGB", "greenX",
  90. DATATYPE_DOUBLE, false, null,
  91. "0", "65535", true, true);
  92. addAttribute("LCS_CALIBRATED_RGB", "greenY",
  93. DATATYPE_DOUBLE, false, null,
  94. "0", "65535", true, true);
  95. addAttribute("LCS_CALIBRATED_RGB", "greenZ",
  96. DATATYPE_DOUBLE, false, null,
  97. "0", "65535", true, true);
  98. addAttribute("LCS_CALIBRATED_RGB", "blueX",
  99. DATATYPE_DOUBLE, false, null,
  100. "0", "65535", true, true);
  101. addAttribute("LCS_CALIBRATED_RGB", "blueY",
  102. DATATYPE_DOUBLE, false, null,
  103. "0", "65535", true, true);
  104. addAttribute("LCS_CALIBRATED_RGB", "blueZ",
  105. DATATYPE_DOUBLE, false, null,
  106. "0", "65535", true, true);
  107. addElement("LCS_CALIBRATED_RGB_GAMMA",
  108. BMPMetadata.nativeMetadataFormatName,
  109. CHILD_POLICY_EMPTY);
  110. addAttribute("LCS_CALIBRATED_RGB_GAMMA","red",
  111. DATATYPE_INTEGER, false, null,
  112. "0", "65535", true, true);
  113. addAttribute("LCS_CALIBRATED_RGB_GAMMA","green",
  114. DATATYPE_INTEGER, false, null,
  115. "0", "65535", true, true);
  116. addAttribute("LCS_CALIBRATED_RGB_GAMMA","blue",
  117. DATATYPE_INTEGER, false, null,
  118. "0", "65535", true, true);
  119. addElement("Intent",
  120. BMPMetadata.nativeMetadataFormatName,
  121. CHILD_POLICY_EMPTY);
  122. addAttribute("Intent", "value",
  123. DATATYPE_INTEGER, false, null,
  124. "0", "65535", true, true);
  125. // root -> Palette
  126. addElement("Palette",
  127. BMPMetadata.nativeMetadataFormatName,
  128. 2, 256);
  129. addAttribute("Palette", "sizeOfPalette",
  130. DATATYPE_INTEGER, true, null);
  131. addBooleanAttribute("Palette", "sortFlag",
  132. false, false);
  133. // root -> Palette -> PaletteEntry
  134. addElement("PaletteEntry", "Palette",
  135. CHILD_POLICY_EMPTY);
  136. addAttribute("PaletteEntry", "index",
  137. DATATYPE_INTEGER, true, null,
  138. "0", "255", true, true);
  139. addAttribute("PaletteEntry", "red",
  140. DATATYPE_INTEGER, true, null,
  141. "0", "255", true, true);
  142. addAttribute("PaletteEntry", "green",
  143. DATATYPE_INTEGER, true, null,
  144. "0", "255", true, true);
  145. addAttribute("PaletteEntry", "blue",
  146. DATATYPE_INTEGER, true, null,
  147. "0", "255", true, true);
  148. // root -> CommentExtensions
  149. addElement("CommentExtensions",
  150. BMPMetadata.nativeMetadataFormatName,
  151. 1, Integer.MAX_VALUE);
  152. // root -> CommentExtensions -> CommentExtension
  153. addElement("CommentExtension", "CommentExtensions",
  154. CHILD_POLICY_EMPTY);
  155. addAttribute("CommentExtension", "value",
  156. DATATYPE_STRING, true, null);
  157. }
  158. public boolean canNodeAppear(String elementName,
  159. ImageTypeSpecifier imageType) {
  160. return true;
  161. }
  162. public static synchronized IIOMetadataFormat getInstance() {
  163. if (instance == null) {
  164. instance = new BMPMetadataFormat();
  165. }
  166. return instance;
  167. }
  168. }