字模转换工具源代码Word下载.docx
《字模转换工具源代码Word下载.docx》由会员分享,可在线阅读,更多相关《字模转换工具源代码Word下载.docx(31页珍藏版)》请在冰点文库上搜索。
图片或字模尺寸(单位:
8*8Pix)"
Enabled=0'
Height=735
Left=120
TabIndex=30
Top=3720
Width=4455
BeginVB.VScrollBarVScrollW
Left=3600
Max=0
Min=32767
TabIndex=33
Top=240
Value=32
Width=375
BeginVB.TextBoxtxImgWidth
Height=390
Left=2760
Locked=-1'
TabIndex=32
Text="
32"
Width=855
BeginVB.LabelLabel7
图片或字模宽度"
Height=255
TabIndex=31
Top=360
BeginVB.FrameFrame1
偏移量(仅针对位图,因为计算字模偏移量太麻烦了)"
Height=855
TabIndex=23
Top=1440
BeginVB.VScrollBarVScrollY
Min=16
TabIndex=29
BeginVB.VScrollBarVScrollX
Left=1560
TabIndex=28
BeginVB.TextBoxtxOffsetY
Left=3000
TabIndex=27
0"
Width=615
BeginVB.TextBoxtxOffsetX
Left=960
TabIndex=26
BeginVB.LabelLabel6
OffsetY:
"
Left=2160
TabIndex=25
BeginVB.LabelLabel5
OffsetX:
TabIndex=24
BeginVB.PictureBoxPicture1
H00800080&
Height=3495
Left=4920
ScaleHeight=229
ScaleWidth=341
TabIndex=19
Top=120
Width=5175
BeginVB.FrameFrame4
调色-透明"
Height=1215
Left=1680
TabIndex=10
Top=2400
Width=1455
BeginVB.OptionButtonTSB3
11"
Left=840
TabIndex=18
Top=720
Width=495
BeginVB.OptionButtonTSB2
10"
TabIndex=17
BeginVB.OptionButtonTSB1
01"
TabIndex=16
BeginVB.OptionButtonTSB0
00"
TabIndex=15
Value=-1'
BeginVB.FrameFrame3
调色-字模"
TabIndex=9
BeginVB.OptionButtonTSA3
TabIndex=14
BeginVB.OptionButtonTSA2
TabIndex=13
BeginVB.OptionButtonTSA1
TabIndex=12
BeginVB.OptionButtonTSA0
TabIndex=11
BeginVB.CommandButtonCommandToChr
转换成字模"
Height=495
Left=2400
TabIndex=8
Top=4560
Width=2175
BeginVB.CommandButtonCommandToBmp
转换成位图"
TabIndex=7
BeginVB.FrameFrame2
字体大小"
TabIndex=2
Top=600
BeginVB.OptionButtonZT16
16"
TabIndex=6
Width=735
BeginVB.OptionButtonZT14
14"
TabIndex=5
Width=975
BeginVB.OptionButtonZT12
12"
Left=1080
TabIndex=4
BeginVB.OptionButtonZT10
TabIndex=3
BeginVB.TextBoxText1
TabIndex=1
Width=3495
BeginVB.LabelLabel8
字模A=01+03字模B=10+03透明C=00"
TabIndex=35
Top=2520
Visible=0'
BeginVB.LabelLabel4
提示信息"
TabIndex=22
BeginVB.LabelLabel3
预览窗口>
>
Height=1455
Left=4680
TabIndex=21
Width=255
BeginVB.LabelLabel2
by六十六Yu.Lee."
Left=7080
TabIndex=20
Top=4800
Width=3015
BeginVB.LabelLabel1
字库文件"
Left=240
TabIndex=0
End
AttributeVB_Name="
AttributeVB_GlobalNameSpace=False
AttributeVB_Creatable=False
AttributeVB_PredeclaredId=True
AttributeVB_Exposed=False
PrivateZK_PATHAsString
'
PrivateZK_TYPEAsInteger
PrivateZK_SIZEAsInteger
PrivateZK_COLOR_AAsInteger
PrivateZK_COLOR_BAsInteger
PrivateZK_COLOR_CAsInteger
PrivateZK_OVERLAPAsBoolean'
重叠绘制?
PrivateZK_OFFSET_XAsInteger
PrivateZK_OFFSET_YAsInteger
PrivateZK_IMG_WIDTHAsInteger
PrivateZK_IMG_HEIGHTAsInteger
PrivateConstCHAR_128AsByte=128
字库绘制出来时候的X,Y坐标
PrivateDRAW_XAsLong
PrivateDRAW_YAsLong
读取当前设定选项
PrivateSubLoadParams()
IfHZK.Value=TrueThenZK_TYPE=0
IfGBK.Value=TrueThenZK_TYPE=1
ZK_IMG_WIDTH=CInt(txImgWidth.Text)
ZK_OFFSET_X=CInt(txOffsetX.Text)
ZK_OFFSET_Y=CInt(txOffsetY.Text)
IfZT10.Value=TrueThenZK_SIZE=10
IfZT12.Value=TrueThenZK_SIZE=12
IfZT14.Value=TrueThenZK_SIZE=14
IfZT16.Value=TrueThenZK_SIZE=16
IfCheck1.Value=0Then
IfTSA0.Value=TrueThenZK_COLOR_A=0
IfTSA1.Value=TrueThenZK_COLOR_A=1
IfTSA2.Value=TrueThenZK_COLOR_A=2
IfTSA3.Value=TrueThenZK_COLOR_A=3
IfTSB0.Value=TrueThenZK_COLOR_C=0
IfTSB1.Value=TrueThenZK_COLOR_C=1
IfTSB2.Value=TrueThenZK_COLOR_C=2
IfTSB3.Value=TrueThenZK_COLOR_C=3
ElseIfCheck1.Value=1Then
ZK_COLOR_A=1
ZK_COLOR_B=2
ZK_COLOR_C=0
EndIf
EndSub
转换成位图
PrivateSubCommandToBmp_Click()
清空预览框
读取参数
LoadParams
读取字库文件
DimnFileSizeAsLong
DimbyteFileBuf()AsByte
'
打开字库文件
OpenZK_PATHForBinaryAs1
OnErrorGoToERROR_MESSAGE
取得文件字节总数
nFileSize=LOF
(1)
将字库文件读入缓冲区
ReDimbyteFileBuf(1TonFileSize)AsByte
Get1,,byteFileBuf
Close1
分析字模
DimnHZCountAsLong'
字库中包含的汉字数
DimnBytePerHZAsLong'
每个汉字所占的字节数
每个汉字占用字库的字节数
字库中的汉字个数
SelectCaseZK_SIZE
Case10
nBytePerHZ=20
nHZCount=nFileSize/20
Case12
nBytePerHZ=24
nHZCount=nFileSize/24
Case14
nBytePerHZ=28
nHZCount=nFileSize/28
Case16
nBytePerHZ=32
nHZCount=nFileSize/32
EndSelect
计算将要生成的位图大小
只计算出高度占用图块数即可利用高度块数和宽度块数可以计算所有的关于图片尺寸的数值
不论是10,12,14还是16号字,每个汉字在NES字库中我都希望它占用4个8*8Pix图块
所以字库占用的图块数==字库字数*4
DimnImgCountAsLong
计算转换这套字库一共需要多少个图块
nImgCount=nHZCount*4
计算生成图像高度是多少个图块(注意对某些情况下不能整除的补齐)
ZK_IMG_HEIGHT=(nImgCount+(nImgCountModZK_IMG_WIDTH))/ZK_IMG_WIDTH
析出字
DimnIndexAsLong
DimnLocationAsLong
DimnRMulAsByte'
计算右移乘数,因为VB里没有移位运算符
Dimpx,pyAsLong'
临时变量,记录要绘点的位置
初始化原点
DRAW_X=0
DRAW_Y=0
遍历所有汉字
FornIndex=1TonHZCount
得到一个字的数据首地址
注意VB中按字节读取文件的索引是从1开始的
nLocation=(nIndex-1)*nBytePerHZ+1
Fori=0To(nBytePerHZ-1)
Forj=0To7
这一步为了减少运算量,如果字节为零,则对应8位全为零
下一步位运算就没有必要了[这两行代码可以去掉]
IfbyteFileBuf(nLocation+i)=0Then
GoToNEXT_LOOP
EndIf
计算移位乘数
SelectCasej
Case0:
nRMul=1
Case1:
nRMul=2
Case2:
nRMul=4
Case3:
nRMul=8
Case4:
nRMul=16
Case5:
nRMul=32
Case6:
nRMul=64
Case7:
nRMul=128
注意括号,and和<
是同一级运算
If(byteFileBuf(nLocation+i)And(CHAR_128\nRMul))<
0Then
欲绘点的坐标
px=DRAW_X+j+(iMod2)*8
py=DRAW_Y+i\2
加入偏移量
px=px+ZK_OFFSET_X
py=py+ZK_OFFSET_Y
TODO
...
预览窗口
预览窗口只显示15行字模
IfDRAW_Y<
=ZK_SIZE*15Then'
只显示前15列
Picture1.PSet(px,py)
DoEvents
Else:
NEXT_LOOP:
Nextj
Nexti
IfDRAW_X>
ZK_SIZE*24Then'
每行只显示24个字
DRAW_Y=DRAW_Y+ZK_SIZE
Else
DRAW_X=DRAW_X+16'
为了凑整,10-16的字库每个字的宽度都是16
转换进度显示
Label4.Caption=nIndex&
"
/"
&
nHZCount
NextnIndex
Label4.Caption=nHZCount&
个汉字转换完成!
GoToEND_SUB
ERROR_MESSAGE:
MsgBox"
我擦~出错了?
!
END_SUB:
转换成NES字模文件
PrivateSubCommandToChr_Click()
DimbyteFileBuf()AsByte'
字库文件缓冲
DimNesBufIndexAsLong'
欲生成的Nes文件缓冲的索引
NesBufIndex=1'
初始化
DimbyteNesBuf()AsByte'
欲生成的Nes文件缓冲(比字库文件缓冲至少大两倍,因为NES是固定的16*16Pix一个字)
OpenZK_PATHForBinaryAs#1
Get#1,,byteFileBuf
Close#1