31 #ifndef PNGPP_PIXEL_BUFFER_HPP_INCLUDED
32 #define PNGPP_PIXEL_BUFFER_HPP_INCLUDED
53 template<
typename row >
class row_traits;
58 template<
typename pixel,
60 class traits = row_traits< row > >
110 for (
typename row_vec::iterator r =
m_rows.begin();
193 template<
typename pixel >
194 class row_traits< std::vector< pixel > >
200 static pixel* get_data(std::vector< pixel >& vec)
210 template<
typename pixel >
228 template<
class pixel,
typename reference >
244 operator pixel()
const
246 return pixel((
m_ref >>
m_shift) & pixel::get_bit_mask());
258 size_t const bits = pixel::get_bit_depth();
264 return 8 / pixel::get_bit_depth();
271 template<
class pixel >
282 template<
class pixel >
302 return *
this =
static_cast< pixel
>(other);
305 template<
typename reference >
309 return *
this =
static_cast< pixel
>(other);
315 & ~(pixel::get_bit_mask() << this->
m_shift))
330 template<
class pixel >
352 m_vec.resize(size / get_pixels_per_byte()
353 + (size % get_pixels_per_byte() ? 1 : 0));
383 return pixel_proxy(m_vec.at(index / get_pixels_per_byte()),
403 return pixel_proxy(m_vec[index / get_pixels_per_byte()],
412 assert(m_vec.size());
417 static size_t get_pixels_per_byte()
419 return 8 / pixel::get_bit_depth();
422 std::vector< byte > m_vec;
430 template<
typename pixel >
447 template<
size_t bits >
450 packed_pixel_row< packed_gray_pixel
472 template<
size_t bits >
475 packed_pixel_row< packed_index_pixel
495 #endif // PNGPP_PIXEL_BUFFER_HPP_INCLUDED