00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "ft2_bitmap.hpp"
00026
00027
00028 FT2Bitmap::FT2Bitmap( intf_thread_t *pIntf, int width, int height ):
00029 GenericBitmap( pIntf ), m_width( width ), m_height( height )
00030 {
00031
00032 m_pData = new uint8_t[m_height * m_width * 4];
00033 memset( m_pData, 0, m_height * m_width * 4 );
00034 }
00035
00036
00037 FT2Bitmap::~FT2Bitmap()
00038 {
00039 if( m_pData )
00040 {
00041 delete[] m_pData;
00042 }
00043 }
00044
00045
00046 void FT2Bitmap::draw( const FT_Bitmap &rBitmap, int left, int top,
00047 uint32_t color )
00048 {
00049 uint8_t *pBuf = rBitmap.buffer;
00050
00051
00052 uint8_t blue = color & 0xff;
00053 uint8_t green = (color >> 8) & 0xff;
00054 uint8_t red = (color >> 16) & 0xff;
00055
00056 for( int y = top; y < top + rBitmap.rows; y++ )
00057 {
00058 uint8_t *pData = m_pData + 4 * (m_width * y + left);
00059 for( int x = left; x < left + rBitmap.width; x++ )
00060 {
00061
00062 uint8_t val = *(pBuf++);
00063 *(pData++) = (blue * val) >> 8;
00064 *(pData++) = (green * val) >> 8;
00065 *(pData++) = (red * val) >> 8;
00066 *(pData++) = val;
00067 }
00068 }
00069 }
00070
00071