44,45d43
< #include <cassert>
<
48,54d45
< const PixelConverter PixelConverter::rgba8888_le(4, 0, 8, 16, 8, 8, 8);
< const PixelConverter PixelConverter::rgba8888_be(4, 0, 8, 16, 8, 8, 8,
< BigEndianByteOrder);
< const PixelConverter PixelConverter::rgb565_le(2, 0, 5, 11, 5, 6, 5);
< const PixelConverter PixelConverter::rgb565_be(2, 0, 5, 11, 5, 6, 5,
< BigEndianByteOrder);
<
57,108d47
< PixelConverter::PixelConverter(unsigned _length,
< unsigned ro, unsigned go, unsigned bo,
< unsigned rw, unsigned gw, unsigned bw,
< ByteOrder _byte_order)
< : length(_length),
< depth(rw + gw + bw),
< byte_order(_byte_order),
< ch_r(ro, rw),
< ch_g(go, gw),
< ch_b(bo, bw)
< {
< assert(length > 1);
< }
<
< PixelConverter::Channel::Channel(unsigned _offset, unsigned width)
< : offset(_offset),
< mask(::mask(width)),
< factor(255.0 / mask)
< {
< }
<
< uint32_t
< PixelConverter::readWord(const uint8_t *p) const
< {
< uint32_t word(0);
<
< if (byte_order == LittleEndianByteOrder) {
< for (int i = 0; i < length; ++i)
< word |= p[i] << (8 * i);
< } else {
< for (int i = 0; i < length; ++i)
< word |= p[i] << (8 * (length - i - 1));
< }
<
< return word;
< }
<
< void
< PixelConverter::writeWord(uint8_t *p, uint32_t word) const
< {
< if (byte_order == LittleEndianByteOrder) {
< for (int i = 0; i < length; ++i)
< p[i] = (word >> (8 * i)) & 0xFF;
< } else {
< for (int i = 0; i < length; ++i)
< p[i] = (word >> (8 * (length - i - 1))) & 0xFF;
< }
< }
<
<
<
<