/*
 *  Licensed 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.
 *  under the License.
 */
package org.apache.commons.sanselan.formats.pcx;

import org.apache.commons.sanselan.SanselanConstants;

public interface PcxConstants extends SanselanConstants
{
    public static final String PARAM_KEY_PCX_COMPRESSION = "PCX_COMPRESSION";
    public static final int PCX_COMPRESSION_UNCOMPRESSED = 0;
    public static final int PCX_COMPRESSION_RLE = 1;

    public static final String PARAM_KEY_PCX_BIT_DEPTH = "PCX_BIT_DEPTH";
}
