--- /dev/null
+#include "../../../../include/freenet/captcha/freeimage/font.h"\r
+\r
+namespace FreeImage\r
+{\r
+\r
+Font::Font()\r
+{\r
+ m_fontwidth=0;\r
+ m_fontheight=0;\r
+}\r
+\r
+Font::Font(const Bitmap &bmp)\r
+{\r
+ m_fontwidth=0;\r
+ m_fontheight=0;\r
+ Load(bmp);\r
+}\r
+\r
+Font::~Font()\r
+{\r
+\r
+}\r
+\r
+const Bitmap &Font::Char(const int num)\r
+{\r
+ if(num>=0 && num<256 && m_chars.size()>num)\r
+ {\r
+ return m_chars[num];\r
+ }\r
+ else\r
+ {\r
+ return m_blank;\r
+ }\r
+}\r
+\r
+const bool Font::Load(const Bitmap &bmp)\r
+{\r
+ m_fontwidth=bmp.Width()/16;\r
+ m_fontheight=bmp.Height()/14;\r
+\r
+ m_chars.clear();\r
+ m_chars.resize(256);\r
+\r
+ int charnum=32;\r
+ for(int yy=0; yy<bmp.Height(); yy+=m_fontheight)\r
+ {\r
+ for(int xx=0; xx<bmp.Width(); xx+=m_fontwidth)\r
+ {\r
+ bool found=false;\r
+ int width=m_fontwidth;\r
+ int idx=bmp.GetPixelIndex(xx+m_fontwidth-1,yy);\r
+ for(int x=xx+m_fontwidth-1; x>xx && found==false; x--)\r
+ {\r
+ for(int y=yy; y<yy+m_fontheight && found==false; y++)\r
+ {\r
+ if(bmp.GetPixelIndex(x,y)!=idx)\r
+ {\r
+ found=true;\r
+ }\r
+ }\r
+ if(found==false)\r
+ {\r
+ width--;\r
+ }\r
+ }\r
+ width==0 ? width=1 : width=width;\r
+ width++;\r
+ width>m_fontwidth ? width=m_fontwidth : false;\r
+ m_chars[charnum].Create(width,m_fontheight,32);\r
+ m_chars[charnum].Blit(bmp,0,0,xx,yy,width,m_fontheight,-1);\r
+ m_chars[charnum].SetTransparent();\r
+ RGBQUAD col=m_chars[charnum].GetPixel(m_chars[charnum].Width()-1,0);\r
+ for(int y=0; y<m_chars[charnum].Height(); y++)\r
+ {\r
+ for(int x=0; x<m_chars[charnum].Width(); x++)\r
+ {\r
+ RGBQUAD col2=m_chars[charnum].GetPixel(x,y);\r
+ if(col.rgbRed==col2.rgbRed && col.rgbGreen==col2.rgbGreen && col.rgbBlue==col2.rgbBlue)\r
+ {\r
+ col2.rgbReserved=0;\r
+ m_chars[charnum].PutPixel(x,y,col2);\r
+ }\r
+ }\r
+ }\r
+ charnum++;\r
+ }\r
+ }\r
+\r
+ return true;\r
+}\r
+\r
+} // namespace FreeImage\r