summaryrefslogtreecommitdiffstats
path: root/basebmp/inc/rgbmaskpixelformats.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'basebmp/inc/rgbmaskpixelformats.hxx')
-rw-r--r--basebmp/inc/rgbmaskpixelformats.hxx341
1 files changed, 0 insertions, 341 deletions
diff --git a/basebmp/inc/rgbmaskpixelformats.hxx b/basebmp/inc/rgbmaskpixelformats.hxx
deleted file mode 100644
index 9fde0d015730..000000000000
--- a/basebmp/inc/rgbmaskpixelformats.hxx
+++ /dev/null
@@ -1,341 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-
-#ifndef INCLUDED_BASEBMP_INC_RGBMASKPIXELFORMATS_HXX
-#define INCLUDED_BASEBMP_INC_RGBMASKPIXELFORMATS_HXX
-
-#include <basebmp/color.hxx>
-#include <colortraits.hxx>
-#include <accessor.hxx>
-#include <pixeliterator.hxx>
-#include <pixelformatadapters.hxx>
-#include <metafunctions.hxx>
-#include <endian.hxx>
-
-#include <vigra/numerictraits.hxx>
-#include <vigra/metaprogramming.hxx>
-
-#include <functional>
-
-namespace basebmp
-{
-
-/** Base class operating on RGB truecolor mask pixel
-
- Use this template, if you have an (integer) pixel type, and three
- bitmasks denoting where the channel bits are.
-
- @tpl PixelType
- Input pixel type to operate on
-
- @tpl ColorType
- Underlying color type, to convert the pixel values into
-
- @tpl RedMask
- Bitmask, to access the red bits in the data type
-
- @tpl GreenMask
- Bitmask, to access the green bits in the data type
-
- @tpl BlueMask
- Bitmask, to access the blue bits in the data type
-
- @tpl SwapBytes
- When true, the final pixel values will be byte-swapped before
- passed on.
- */
-template< typename PixelType,
- typename ColorType,
- unsigned int RedMask,
- unsigned int GreenMask,
- unsigned int BlueMask,
- bool SwapBytes > struct RGBMaskFunctorBase
-{
- typedef PixelType pixel_type;
- typedef ColorType color_type;
- typedef typename make_unsigned<pixel_type>::type unsigned_pixel_type;
- typedef typename ColorTraits<ColorType>::component_type component_type;
-
- // calc corrective shifts for all three channels in advance
- enum {
- red_shift = numberOfTrailingZeros<RedMask>::value,
- green_shift = numberOfTrailingZeros<GreenMask>::value,
- blue_shift = numberOfTrailingZeros<BlueMask>::value,
-
- red_bits = bitcount<RedMask>::value,
- green_bits = bitcount<GreenMask>::value,
- blue_bits = bitcount<BlueMask>::value
- };
-};
-
-template< typename PixelType,
- typename ColorType,
- unsigned int RedMask,
- unsigned int GreenMask,
- unsigned int BlueMask,
- bool SwapBytes > struct RGBMaskGetter :
- public RGBMaskFunctorBase<PixelType,
- ColorType,
- RedMask,
- GreenMask,
- BlueMask,
- SwapBytes>,
- public std::unary_function<PixelType, ColorType>
-{
- typedef RGBMaskFunctorBase<PixelType,
- ColorType,
- RedMask,
- GreenMask,
- BlueMask,
- SwapBytes> base_type;
-
- ColorType operator()( PixelType v ) const
- {
- v = SwapBytes ? byteSwap(v) : v;
-
- const typename base_type::unsigned_pixel_type red (v & RedMask);
- const typename base_type::unsigned_pixel_type green(v & GreenMask);
- const typename base_type::unsigned_pixel_type blue (v & BlueMask);
-
- // shift color nibbles to right-aligned position. ORing it
- // channel value shifted twice the number of channel bits, to
- // spread the value into the component_type range
- ColorType res( (shiftRight(red,
- base_type::red_shift-8*
- static_cast<signed>(sizeof(typename base_type::component_type))+
- base_type::red_bits)) |
- (shiftRight(red,
- base_type::red_shift-8*
- static_cast<signed>(sizeof(typename base_type::component_type))+
- 2*base_type::red_bits)),
-
- (shiftRight(green,
- base_type::green_shift-8*
- static_cast<signed>(sizeof(typename base_type::component_type))+
- base_type::green_bits)) |
- (shiftRight(green,
- base_type::green_shift-8*
- static_cast<signed>(sizeof(typename base_type::component_type))+
- 2*base_type::green_bits)),
-
- (shiftRight(blue,
- base_type::blue_shift-8*
- static_cast<signed>(sizeof(typename base_type::component_type))+
- base_type::blue_bits)) |
- (shiftRight(blue,
- base_type::blue_shift-8*
- static_cast<signed>(sizeof(typename base_type::component_type))+
- 2*base_type::blue_bits)) );
- return res;
- }
-};
-
-template< typename PixelType,
- typename ColorType,
- unsigned int BaseValue,
- unsigned int RedMask,
- unsigned int GreenMask,
- unsigned int BlueMask,
- bool SwapBytes > struct RGBMaskSetter :
- public RGBMaskFunctorBase<PixelType,
- ColorType,
- RedMask,
- GreenMask,
- BlueMask,
- SwapBytes>,
- public std::unary_function<ColorType, PixelType>
-{
- typedef RGBMaskFunctorBase<PixelType,
- ColorType,
- RedMask,
- GreenMask,
- BlueMask,
- SwapBytes> base_type;
-
- PixelType operator()( ColorType const& c ) const
- {
- const typename base_type::unsigned_pixel_type red (c.getRed());
- const typename base_type::unsigned_pixel_type green(c.getGreen());
- const typename base_type::unsigned_pixel_type blue (c.getBlue());
-
- typename base_type::unsigned_pixel_type res(
- BaseValue |
- (shiftLeft(red,
- base_type::red_shift-8*
- static_cast<signed>(sizeof(typename base_type::component_type))+
- base_type::red_bits) & RedMask) |
- (shiftLeft(green,
- base_type::green_shift-8*
- static_cast<signed>(sizeof(typename base_type::component_type))+
- base_type::green_bits) & GreenMask) |
- (shiftLeft(blue,
- base_type::blue_shift-8*
- static_cast<signed>(sizeof(typename base_type::component_type))+
- base_type::blue_bits) & BlueMask) );
-
- return SwapBytes ? byteSwap(res) : res;
- }
-};
-
-
-
-template< typename PixelType,
- unsigned int BaseValue,
- unsigned int RedMask,
- unsigned int GreenMask,
- unsigned int BlueMask,
- bool SwapBytes > struct PixelFormatTraitsTemplate_RGBMask
-{
- typedef PixelType pixel_type;
-
- typedef RGBMaskGetter<pixel_type,
- Color,
- RedMask,
- GreenMask,
- BlueMask,
- SwapBytes> getter_type;
- typedef RGBMaskSetter<pixel_type,
- Color,
- BaseValue,
- RedMask,
- GreenMask,
- BlueMask,
- SwapBytes> setter_type;
-
- typedef PixelIterator<pixel_type> iterator_type;
- typedef StandardAccessor<pixel_type> raw_accessor_type;
- typedef AccessorSelector<
- getter_type, setter_type> accessor_selector;
-};
-
-
-
-// Hopefully this is an understandable plaintext explanation that matches
-// reality...
-
-// BASEBMP_TRUECOLORMASK_LSB_SWAP means that on a big-endian platform, a pixel
-// value when viewed as an integer (16 or 32 bits) has to be byte-swapped for
-// the channels to match the masks. Or equivalently (I think), on a big-endian
-// platform, the masks need to be byte-swapped to be correct.
-
-// I.e. on a litte-endian platform the masks work as such.
-
-// BASEBMP_TRUECOLORMASK_MSB_SWAP means the opposite. The masks work as such
-// on big-endian platforms, on little-endian platforms the pixel needs to be
-// byte-swapped for the masks to work.
-
-// So in a sense these two names are "backward". It sounds to me as if
-// BASEBMP_TRUECOLORMASK_LSB_SWAP would mean "when on LSB, swap" ;)
-
-#ifdef OSL_LITENDIAN
-# define BASEBMP_TRUECOLORMASK_LSB_SWAP false
-# define BASEBMP_TRUECOLORMASK_MSB_SWAP true
-#else
-# ifdef OSL_BIGENDIAN
-# define BASEBMP_TRUECOLORMASK_LSB_SWAP true
-# define BASEBMP_TRUECOLORMASK_MSB_SWAP false
-# else
-# error Undetermined endianness!
-# endif
-#endif
-
-
-
-// 16bpp MSB RGB
-typedef PixelFormatTraitsTemplate_RGBMask<
- sal_uInt16,
- 0,
- 0xF800,
- 0x07E0,
- 0x001F,
- BASEBMP_TRUECOLORMASK_MSB_SWAP > PixelFormatTraits_RGB16_565_MSB;
-BASEBMP_SPECIALIZE_ACCESSORTRAITS(PixelFormatTraits_RGB16_565_MSB::getter_type,
- PixelFormatTraits_RGB16_565_MSB::setter_type);
-
-// 16bpp LSB RGB
-typedef PixelFormatTraitsTemplate_RGBMask<
- sal_uInt16,
- 0,
- 0xF800,
- 0x07E0,
- 0x001F,
- BASEBMP_TRUECOLORMASK_LSB_SWAP > PixelFormatTraits_RGB16_565_LSB;
-BASEBMP_SPECIALIZE_ACCESSORTRAITS(PixelFormatTraits_RGB16_565_LSB::getter_type,
- PixelFormatTraits_RGB16_565_LSB::setter_type);
-
-
-// 32bpp formats
-
-// The intent is that the order of channel names in the names of the 32bpp
-// format typedefs below correspond to the order of the channel bytes in
-// memory, if I understand correctly.... I think the point with the below
-// formats is that the channel byte order in memory is the same regardless of
-// platform byte order.
-
-// This one used to be called PixelFormatTraits_RGB32_888.
-
-typedef PixelFormatTraitsTemplate_RGBMask<
- sal_uInt32,
- 0xFF000000,
- 0x00FF0000,
- 0x0000FF00,
- 0x000000FF,
- BASEBMP_TRUECOLORMASK_LSB_SWAP > PixelFormatTraits_BGRA32_8888;
-BASEBMP_SPECIALIZE_ACCESSORTRAITS(PixelFormatTraits_BGRA32_8888::getter_type,
- PixelFormatTraits_BGRA32_8888::setter_type);
-
-// This one used to be called PixelFormatTraits_BGR32_888.
-
-typedef PixelFormatTraitsTemplate_RGBMask<
- sal_uInt32,
- 0xFF000000,
- 0x00FF0000,
- 0x0000FF00,
- 0x000000FF,
- BASEBMP_TRUECOLORMASK_MSB_SWAP > PixelFormatTraits_ARGB32_8888;
-BASEBMP_SPECIALIZE_ACCESSORTRAITS(PixelFormatTraits_ARGB32_8888::getter_type,
- PixelFormatTraits_ARGB32_8888::setter_type);
-
-// The following two ones were added for Android needs and for completeness
-
-typedef PixelFormatTraitsTemplate_RGBMask<
- sal_uInt32,
- 0x000000FF,
- 0xFF000000,
- 0x00FF0000,
- 0x0000FF00,
- BASEBMP_TRUECOLORMASK_LSB_SWAP > PixelFormatTraits_ABGR32_8888;
-BASEBMP_SPECIALIZE_ACCESSORTRAITS(PixelFormatTraits_ABGR32_8888::getter_type,
- PixelFormatTraits_ABGR32_8888::setter_type);
-
-typedef PixelFormatTraitsTemplate_RGBMask<
- sal_uInt32,
- 0x000000FF,
- 0xFF000000,
- 0x00FF0000,
- 0x0000FF00,
- BASEBMP_TRUECOLORMASK_MSB_SWAP > PixelFormatTraits_RGBA32_8888;
-BASEBMP_SPECIALIZE_ACCESSORTRAITS(PixelFormatTraits_RGBA32_8888::getter_type,
- PixelFormatTraits_RGBA32_8888::setter_type);
-
-} // namespace basebmp
-
-#endif /* INCLUDED_BASEBMP_INC_RGBMASKPIXELFORMATS_HXX */
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */