1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 #ifndef INCLUDED_BASEBMP_INTCONVERSION_HXX 29 #define INCLUDED_BASEBMP_INTCONVERSION_HXX 30 31 #include <vigra/rgbvalue.hxx> 32 #include <functional> 33 34 namespace basebmp 35 { 36 // metafunctions to retrieve correct POD from/to basebmp::Color 37 //------------------------------------------------------------------------ 38 39 /// type-safe conversion from RgbValue to packed int32 40 template< class RgbVal > struct UInt32FromRgbValue 41 { 42 sal_uInt32 operator()( RgbVal const& c ) const 43 { 44 return (c[0] << 16) | (c[1] << 8) | c[2]; 45 } 46 }; 47 48 /// type-safe conversion from packed int32 to RgbValue 49 template< class RgbVal > struct RgbValueFromUInt32 50 { 51 RgbVal operator()( sal_uInt32 c ) const 52 { 53 return RgbVal((c >> 16) & 0xFF, 54 (c >> 8) & 0xFF, 55 c & 0xFF); 56 } 57 }; 58 59 /// Get converter from given data type to sal_uInt32 60 template< typename DataType > struct uInt32Converter 61 { 62 typedef std::identity<DataType> to; 63 typedef std::identity<DataType> from; 64 }; 65 template< unsigned int RedIndex, 66 unsigned int GreenIndex, 67 unsigned int BlueIndex > struct uInt32Converter< 68 vigra::RGBValue< sal_uInt8, 69 RedIndex, 70 GreenIndex, 71 BlueIndex > > 72 { 73 typedef UInt32FromRgbValue< 74 vigra::RGBValue< sal_uInt8, 75 RedIndex, 76 GreenIndex, 77 BlueIndex > > 78 to; 79 typedef RgbValueFromUInt32< 80 vigra::RGBValue< sal_uInt8, 81 RedIndex, 82 GreenIndex, 83 BlueIndex > > 84 from; 85 }; 86 } 87 88 #endif /* INCLUDED_BASEBMP_INTCONVERSION_HXX */ 89