/**************************************************************
 *
 * 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.
 *
 *************************************************************/


#ifndef __com_sun_star_rendering_FloatingPointBitmapFormat_idl__
#define __com_sun_star_rendering_FloatingPointBitmapFormat_idl__

module com { module sun { module star { module rendering {

/** This structure describes format of a floating point bitmap.<p>

    @since OpenOffice 2.0
 */
constants FloatingPointBitmapFormat
{
    /** Half-float format.<p>

    	The color components are stored in the half-float format,
    	i.e. in a 16 bit value, with 5 bit exponent, 10 bit mantissa
    	and a sign bit. See also <a
    	href="http://www.openexr.com/">OpenEXR</a> for a format
    	employing half-floats.<p>
     */
    const byte HALFFLOAT=0;

    /** IEEE float format.<p>

    	The color components are stored in the IEEE single-precision
    	floating point format, i.e. in a 32 bit value, with 8 bit
    	exponent, 23 bit mantissa and a sign bit.<p>
     */
    const byte FLOAT=1;

    /** IEEE double format.<p>

    	The color components are stored in the IEEE double-precision
    	floating point format, i.e. in a 64 bit value, with 16 bit
    	exponent, 47 bit mantissa and a sign bit.<p>
     */
    const byte DOUBLE=2;
};

}; }; }; };

#endif
