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