/*
 *
 *  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.flex.swf.tags;

import org.apache.flex.swf.TagType;

/**
 * Represents a <code>DefineBitsLossless</code> tag in a SWF file.
 * <p>
 * Defines a loss-less bitmap character that contains RGB bitmap data compressed
 * with ZLIB. The data format used by the ZLIB library is described by Request
 * for Comments (RFCs) documents 1950 to 1952.
 * <p>
 * Two kinds of bitmaps are supported.
 * <ul>
 * <li>Color-mapped images define a color-map of up to 256 colors, each
 * represented by a 24-bit RGB value, and then use 8-bit pixel values to index
 * into the color-map.</li>
 * <li>Direct images store actual pixel color values using 15 bits (32,768
 * colors) or 24 bits (about 17 million colors).</li>
 * </ul>
 */
public class DefineBitsLosslessTag extends CharacterTag
        implements IDefineBinaryImageTag, IAlwaysLongTag
{
    public static final int BF_8BIT_COLORMAPPED_IMAGE = 3;
    public static final int BF_15BIT_RGB_IMAGE = 4;
    public static final int BF_24BIT_RGB_IMAGE = 5;

    /**
     * Constructor.
     */
    public DefineBitsLosslessTag()
    {
        super(TagType.DefineBitsLossless);
    }

    /**
     * Protected constructor for use by subclasses with other tag types.
     */
    protected DefineBitsLosslessTag(TagType tagType)
    {
        super(tagType);
    }

    private int bitmapFormat;
    private int bitmapWidth;
    private int bitmapHeight;
    private int bitmapColorTableSize;
    private byte[] zlibBitmapData;

    public int getBitmapFormat()
    {
        return bitmapFormat;
    }

    public void setBitmapFormat(int bitmapFormat)
    {
        this.bitmapFormat = bitmapFormat;
    }

    public int getBitmapWidth()
    {
        return bitmapWidth;
    }

    public void setBitmapWidth(int bitmapWidth)
    {
        this.bitmapWidth = bitmapWidth;
    }

    public int getBitmapHeight()
    {
        return bitmapHeight;
    }

    public void setBitmapHeight(int bitmapHeight)
    {
        this.bitmapHeight = bitmapHeight;
    }

    public int getBitmapColorTableSize()
    {
        return bitmapColorTableSize;
    }

    public void setBitmapColorTableSize(int bitmapColorTableSize)
    {
        this.bitmapColorTableSize = bitmapColorTableSize;
    }

    public byte[] getZlibBitmapData()
    {
        return zlibBitmapData;
    }

    public void setZlibBitmapData(byte[] zlibBitmapData)
    {
        this.zlibBitmapData = zlibBitmapData;
    }

    public static int getBf8bitColormappedImage()
    {
        return BF_8BIT_COLORMAPPED_IMAGE;
    }

    public static int getBf15bitRgbImage()
    {
        return BF_15BIT_RGB_IMAGE;
    }

    public static int getBf24bitRgbImage()
    {
        return BF_24BIT_RGB_IMAGE;
    }

    @Override
    public byte[] getData()
    {
        return getZlibBitmapData();
    }
}
