1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- /* ====================================================================
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- ==================================================================== */
- package org.apache.poi.xssf.usermodel;
-
- import java.util.List;
-
- import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTColors;
- import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRgbColor;
-
- /**
- * custom index color map, i.e. from the styles.xml definition
- */
- public class CustomIndexedColorMap implements IndexedColorMap {
-
- private final byte[][] colorIndex;
-
- /**
- * @param colors array of RGB triplets indexed by color index
- */
- private CustomIndexedColorMap(byte [][] colors) {
- this.colorIndex = colors;
- }
-
- public byte[] getRGB(int index) {
- if (colorIndex == null || index < 0 || index >= colorIndex.length) return null;
- return colorIndex[index];
- }
-
- /**
- * OOXML spec says if this exists it must have all indexes.
- * <p/>
- * From the OOXML Spec, Part 1, section 18.8.27:
- * <p/><i>
- * This element contains a sequence of RGB color values that correspond to color indexes (zero-based). When
- * using the default indexed color palette, the values are not written out, but instead are implied. When the color
- * palette has been modified from default, then the entire color palette is written out.
- * </i>
- * @param colors CTColors from styles.xml possibly defining a custom color indexing scheme
- * @return custom indexed color map or null if none defined in the document
- */
- public static CustomIndexedColorMap fromColors(CTColors colors) {
- if (colors == null || ! colors.isSetIndexedColors()) return null;
-
- List<CTRgbColor> rgbColorList = colors.getIndexedColors().getRgbColorList();
- byte[][] customColorIndex = new byte[rgbColorList.size()][3];
- for (int i=0; i < rgbColorList.size(); i++) {
- customColorIndex[i] = rgbColorList.get(i).getRgb();
- }
- return new CustomIndexedColorMap(customColorIndex);
- }
- }
|