- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
nLen = m_aRealTexts[index].m_txtString.length();
for (int iyhx = 0; iyhx < nLen; iyhx++) {
cLetter = m_aRealTexts[index].m_txtString.charAt(iyhx);
CTxtCharStyle pCharNode = new CTxtCharStyle(cLetter);
pCharNode.SetTxtFontFace(m_nFontFace);
m_aRealTexts[index].m_txtChars.add(pCharNode);
}
...
public void SetTxtFontFace(byte nType)
{
String sLine, sTemp;
int nMark;
float xValue, yValue; //笔画点位的临时坐标
byte bIsBigChar = 0; //1表示ANSI字体UserArial_ansi.uft,2表示Unicode字体UserArial_unicode.uft,3表示宋体hztxt1.shx
m_cStroke.clear(); //清空笔画路径链表
if(nType == 1)
{
if((int)m_cChar<0x7F || ((int)m_cChar>=0x2160&&(int)m_cChar<=0x2169))
{
//按Unicode编码顺序处理字符查找指定字库文件,避免读取不必要的字库文件
InputStream fInFile = this.getClass().getResourceAsStream("/TagResources/UserArial_ansi.uft");
...
fInFile.close();
}
else if((int)m_cChar>=0x007F && (int)m_cChar<0x2FFF)
{
//字符在UserArial_ansi.uft中未找到,看是否在UserArial_unicode.uft中
int nGetByte;
sLine = new String("");
sTemp = new String("");
//float xValue, yValue;
byte[] CharUnicode = new byte[2]; //一次读取两个字节,为一个字符
byte[] cBytes = new byte[2];
InputStream fInFile = this.getClass().getResourceAsStream("/TagResources/UserArial_unicode.uft");
while((nGetByte = fInFile.read(cBytes, 0, 2)) > 0)
{
...
}
fInFile.close();
}
else if((int)m_cChar>=0x3000)
{
//字符在西文字库UserArial.uft中未找到,是大字体,则在宋体文件hztxt1.shx中查找
m_cWidth = 112.0f; //对于宋体,左下角点为坐标原点,包围盒长宽皆为127,调整量为(127-112)/2=5
m_cHeight = 112.0f;
byte nMoveDown = 5;
InputStream fInFile = this.getClass().getResourceAsStream("/TagResources/hztxt1.shx");
...
fInFile.close();
}
else if(bIsBigChar == 0)
{
//仍然没有找到字符字体,则按空格处理
m_cWidth = 12.0f;
m_cHeight = 16.0f;
m_cStroke.clear();
}
}
else if(nType == 2)
{
try
{
InputStream fInFile = this.getClass().getResourceAsStream("/TagResources/hztxt1.shx");
...
fInFile.close();
}
catch(IOException e)
{
//异常处理
e.printStackTrace();
}
}
}
Ещё один отжиг господ китайцев.
Магические числа вместо энумов и закрытие файлов вне finally - это ещё полбеды. Больше всего умиляет, что при каждой отрисовке отдельно для каждой буквы файл шрифта открывается и сканируется по новой. Неудивительно, что отрисовка так тормозит. Буду переписывать это дело - загружать глифы из файла один раз и затем дёргать их из кэша.
karamba 23.09.2011 16:39 # +1
byte bIsBigChar = 0;
...
else if(bIsBigChar == 0)
Чето не уловил магический смысл этой переменной. А вообще даже к такому коду, можно подойти конструктивно, не люблю переписывать код, не благодарное дело :(
Lure Of Chaos 23.09.2011 16:41 # +2
lucidfox 23.09.2011 16:45 # 0
Lure Of Chaos 23.09.2011 16:47 # +4
roman-kashitsyn 23.09.2011 16:48 # 0
Lure Of Chaos 23.09.2011 16:52 # 0
roman-kashitsyn 23.09.2011 16:56 # 0
absolut 23.09.2011 17:17 # +6
Magic Fucking Chinese?
karamba 23.09.2011 18:03 # +7
lucidfox 24.09.2011 06:46 # −2
CPPGovno 24.09.2011 12:23 # +3
Lure Of Chaos 24.09.2011 12:48 # 0
absolut 24.09.2011 16:38 # +2