home *** CD-ROM | disk | FTP | other *** search
/ Hackers Magazine 57 / CdHackersMagazineNr57.iso / Software / Multimedia / k3d-setup-0.7.11.0.exe / include / k3d / k3dsdk / bitmap.h < prev    next >
Encoding:
C/C++ Source or Header  |  2009-02-02  |  3.3 KB  |  126 lines

  1. #ifndef K3DSDK_BITMAP_H
  2. #define K3DSDK_BITMAP_H
  3.  
  4. // K-3D
  5. // Copyright (c) 1995-2007, Timothy M. Shead
  6. //
  7. // Contact: tshead@k-3d.com
  8. //
  9. // This program is free software; you can redistribute it and/or
  10. // modify it under the terms of the GNU General Public
  11. // License as published by the Free Software Foundation; either
  12. // version 2 of the License, or (at your option) any later version.
  13. //
  14. // This program is distributed in the hope that it will be useful,
  15. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  17. // General Public License for more details.
  18. //
  19. // You should have received a copy of the GNU General Public
  20. // License along with this program; if not, write to the Free Software
  21. // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  22.  
  23. /** \file
  24.         \author Timothy M. Shead (tshead@k-3d.com)
  25. */
  26.  
  27. #include "Half/half.h"
  28. #include "result.h"
  29.  
  30. #include <algorithm>
  31. #include <cmath>
  32. #include <functional>
  33. #include <iostream>
  34. #include <string>
  35.  
  36. #include <boost/gil/gil_all.hpp>
  37.  
  38. namespace boost
  39. {
  40.  
  41. namespace gil
  42. {
  43.  
  44. typedef half bits16f;
  45.  
  46. template<>
  47. struct channel_traits<bits16f>
  48. {
  49.     typedef half value_type;
  50.     typedef half& reference;
  51.     typedef half* pointer;
  52.     typedef const half& const_reference;
  53.     typedef const half* const_pointer;
  54.     BOOST_STATIC_CONSTANT(bool, is_mutable=true);
  55.  
  56.     static value_type min_value()
  57.     {
  58.         return bits16f(0.0f);
  59.     }
  60.  
  61.     static value_type max_value()
  62.     {
  63.         return bits16f(1.0f);
  64.     }
  65. };
  66.  
  67. GIL_DEFINE_BASE_TYPEDEFS(16f,gray)
  68. GIL_DEFINE_BASE_TYPEDEFS(16f,bgr)
  69. GIL_DEFINE_BASE_TYPEDEFS(16f,argb)
  70. GIL_DEFINE_BASE_TYPEDEFS(16f,abgr)
  71. GIL_DEFINE_BASE_TYPEDEFS(16f,bgra)
  72.  
  73. GIL_DEFINE_ALL_TYPEDEFS(16f,rgb)
  74. GIL_DEFINE_ALL_TYPEDEFS(16f,rgba)
  75. GIL_DEFINE_ALL_TYPEDEFS(16f,cmyk)
  76.  
  77. template <int N> struct devicen_t;
  78. template <int N> struct devicen_layout_t;
  79. GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(16f,dev2n, devicen_t<2>, devicen_layout_t<2>)
  80. GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(16f,dev3n, devicen_t<3>, devicen_layout_t<3>)
  81. GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(16f,dev4n, devicen_t<4>, devicen_layout_t<4>)
  82. GIL_DEFINE_ALL_TYPEDEFS_INTERNAL(16f,dev5n, devicen_t<5>, devicen_layout_t<5>)
  83.  
  84. } // namespace gil
  85.  
  86. } // namespace boost
  87.  
  88. namespace k3d
  89. {
  90.  
  91. /// Defines a standard pixel as half-precision floating-point RGBA
  92. typedef boost::gil::pixel<boost::gil::bits16f, boost::gil::rgba_layout_t> pixel;
  93. /// Defines a standard bitmap as half-precision floating-point RGBA
  94. typedef boost::gil::image<pixel, false> bitmap;
  95. /// Define storage for a pixel coordinate
  96. typedef bitmap::coord_t pixel_size_t;
  97.  
  98. /// Fills a bitmap with a checkerboard pattern with given check dimensions and colors
  99. template<typename bitmap_t, typename even_color_t, typename odd_color_t>
  100. void checkerboard_fill(bitmap_t& Bitmap, const pixel_size_t CheckWidth, const pixel_size_t CheckHeight, const even_color_t EvenColor, const odd_color_t OddColor)
  101. {
  102.     typename bitmap_t::iterator target = Bitmap.begin();
  103.  
  104.     for(pixel_size_t y = 0; y < Bitmap.height(); ++y)
  105.     {
  106.         const bool even_row = (y / CheckHeight) % 2;
  107.  
  108.         for(pixel_size_t x = 0; x < Bitmap.width(); ++x)
  109.         {
  110.             const bool even_column = (x / CheckWidth) % 2;
  111.  
  112.             if((even_row + even_column) % 2)
  113.                 *target = EvenColor;
  114.             else
  115.                 *target = OddColor;
  116.  
  117.             ++target;
  118.         }
  119.     }
  120. }
  121.  
  122. } // namespace k3d
  123.  
  124. #endif // !K3DSDK_BITMAP_H
  125.  
  126.