1 /* 2 * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package com.sun.imageio.plugins.bmp; 27 28 import java.util.Arrays; 29 import javax.imageio.ImageTypeSpecifier; 30 import javax.imageio.metadata.IIOMetadataFormat; 31 import javax.imageio.metadata.IIOMetadataFormatImpl; 32 33 public class BMPMetadataFormat extends IIOMetadataFormatImpl { 34 35 private static IIOMetadataFormat instance = null; 36 BMPMetadataFormat()37 private BMPMetadataFormat() { 38 super(BMPMetadata.nativeMetadataFormatName, 39 CHILD_POLICY_SOME); 40 41 // root -> ImageDescriptor 42 addElement("ImageDescriptor", 43 BMPMetadata.nativeMetadataFormatName, 44 CHILD_POLICY_EMPTY); 45 addAttribute("ImageDescriptor", "bmpVersion", 46 DATATYPE_STRING, true, null); 47 addAttribute("ImageDescriptor", "width", 48 DATATYPE_INTEGER, true, null, 49 "0", "65535", true, true); 50 addAttribute("ImageDescriptor", "height", 51 DATATYPE_INTEGER, true, null, 52 "1", "65535", true, true); 53 addAttribute("ImageDescriptor", "bitsPerPixel", 54 DATATYPE_INTEGER, true, null, 55 "1", "65535", true, true); 56 addAttribute("ImageDescriptor", "compression", 57 DATATYPE_INTEGER, false, null); 58 addAttribute("ImageDescriptor", "imageSize", 59 DATATYPE_INTEGER, true, null, 60 "1", "65535", true, true); 61 62 addElement("PixelsPerMeter", 63 BMPMetadata.nativeMetadataFormatName, 64 CHILD_POLICY_EMPTY); 65 addAttribute("PixelsPerMeter", "X", 66 DATATYPE_INTEGER, false, null, 67 "1", "65535", true, true); 68 addAttribute("PixelsPerMeter", "Y", 69 DATATYPE_INTEGER, false, null, 70 "1", "65535", true, true); 71 72 addElement("ColorsUsed", 73 BMPMetadata.nativeMetadataFormatName, 74 CHILD_POLICY_EMPTY); 75 addAttribute("ColorsUsed", "value", 76 DATATYPE_INTEGER, true, null, 77 "0", "65535", true, true); 78 79 addElement("ColorsImportant", 80 BMPMetadata.nativeMetadataFormatName, 81 CHILD_POLICY_EMPTY); 82 addAttribute("ColorsImportant", "value", 83 DATATYPE_INTEGER, false, null, 84 "0", "65535", true, true); 85 86 addElement("BI_BITFIELDS_Mask", 87 BMPMetadata.nativeMetadataFormatName, 88 CHILD_POLICY_EMPTY); 89 addAttribute("BI_BITFIELDS_Mask", "red", 90 DATATYPE_INTEGER, false, null, 91 "0", "65535", true, true); 92 addAttribute("BI_BITFIELDS_Mask", "green", 93 DATATYPE_INTEGER, false, null, 94 "0", "65535", true, true); 95 addAttribute("BI_BITFIELDS_Mask", "blue", 96 DATATYPE_INTEGER, false, null, 97 "0", "65535", true, true); 98 99 addElement("ColorSpace", 100 BMPMetadata.nativeMetadataFormatName, 101 CHILD_POLICY_EMPTY); 102 addAttribute("ColorSpace", "value", 103 DATATYPE_INTEGER, false, null, 104 "0", "65535", true, true); 105 106 addElement("LCS_CALIBRATED_RGB", 107 BMPMetadata.nativeMetadataFormatName, 108 CHILD_POLICY_EMPTY); 109 110 /// Should the max value be 1.7976931348623157e+308 ? 111 addAttribute("LCS_CALIBRATED_RGB", "redX", 112 DATATYPE_DOUBLE, false, null, 113 "0", "65535", true, true); 114 addAttribute("LCS_CALIBRATED_RGB", "redY", 115 DATATYPE_DOUBLE, false, null, 116 "0", "65535", true, true); 117 addAttribute("LCS_CALIBRATED_RGB", "redZ", 118 DATATYPE_DOUBLE, false, null, 119 "0", "65535", true, true); 120 addAttribute("LCS_CALIBRATED_RGB", "greenX", 121 DATATYPE_DOUBLE, false, null, 122 "0", "65535", true, true); 123 addAttribute("LCS_CALIBRATED_RGB", "greenY", 124 DATATYPE_DOUBLE, false, null, 125 "0", "65535", true, true); 126 addAttribute("LCS_CALIBRATED_RGB", "greenZ", 127 DATATYPE_DOUBLE, false, null, 128 "0", "65535", true, true); 129 addAttribute("LCS_CALIBRATED_RGB", "blueX", 130 DATATYPE_DOUBLE, false, null, 131 "0", "65535", true, true); 132 addAttribute("LCS_CALIBRATED_RGB", "blueY", 133 DATATYPE_DOUBLE, false, null, 134 "0", "65535", true, true); 135 addAttribute("LCS_CALIBRATED_RGB", "blueZ", 136 DATATYPE_DOUBLE, false, null, 137 "0", "65535", true, true); 138 139 addElement("LCS_CALIBRATED_RGB_GAMMA", 140 BMPMetadata.nativeMetadataFormatName, 141 CHILD_POLICY_EMPTY); 142 addAttribute("LCS_CALIBRATED_RGB_GAMMA","red", 143 DATATYPE_INTEGER, false, null, 144 "0", "65535", true, true); 145 addAttribute("LCS_CALIBRATED_RGB_GAMMA","green", 146 DATATYPE_INTEGER, false, null, 147 "0", "65535", true, true); 148 addAttribute("LCS_CALIBRATED_RGB_GAMMA","blue", 149 DATATYPE_INTEGER, false, null, 150 "0", "65535", true, true); 151 152 addElement("Intent", 153 BMPMetadata.nativeMetadataFormatName, 154 CHILD_POLICY_EMPTY); 155 addAttribute("Intent", "value", 156 DATATYPE_INTEGER, false, null, 157 "0", "65535", true, true); 158 159 // root -> Palette 160 addElement("Palette", 161 BMPMetadata.nativeMetadataFormatName, 162 2, 256); 163 addAttribute("Palette", "sizeOfPalette", 164 DATATYPE_INTEGER, true, null); 165 addBooleanAttribute("Palette", "sortFlag", 166 false, false); 167 168 // root -> Palette -> PaletteEntry 169 addElement("PaletteEntry", "Palette", 170 CHILD_POLICY_EMPTY); 171 addAttribute("PaletteEntry", "index", 172 DATATYPE_INTEGER, true, null, 173 "0", "255", true, true); 174 addAttribute("PaletteEntry", "red", 175 DATATYPE_INTEGER, true, null, 176 "0", "255", true, true); 177 addAttribute("PaletteEntry", "green", 178 DATATYPE_INTEGER, true, null, 179 "0", "255", true, true); 180 addAttribute("PaletteEntry", "blue", 181 DATATYPE_INTEGER, true, null, 182 "0", "255", true, true); 183 184 185 // root -> CommentExtensions 186 addElement("CommentExtensions", 187 BMPMetadata.nativeMetadataFormatName, 188 1, Integer.MAX_VALUE); 189 190 // root -> CommentExtensions -> CommentExtension 191 addElement("CommentExtension", "CommentExtensions", 192 CHILD_POLICY_EMPTY); 193 addAttribute("CommentExtension", "value", 194 DATATYPE_STRING, true, null); 195 } 196 canNodeAppear(String elementName, ImageTypeSpecifier imageType)197 public boolean canNodeAppear(String elementName, 198 ImageTypeSpecifier imageType) { 199 return true; 200 } 201 getInstance()202 public static synchronized IIOMetadataFormat getInstance() { 203 if (instance == null) { 204 instance = new BMPMetadataFormat(); 205 } 206 return instance; 207 } 208 } 209