提问:如何文字转位图
vb.net吧
全部回复
仅看楼主
level 4
目标是把 一句话 转成 A(,,) as Byte的格式的位图数组,然后我就能把它计算其它的位图数组。
我已经百度了一大圈了,都不理想,能想到的:
1.能不能直接访问字体库提取点阵图(百度到c++似乎能实现)
2.vb6.0可以在窗体上打印文字,然后截图。但是我要实现的时候界面没有任何变化(船体界面要显示其它东西,而且也不美观),在后台静默完成。
3.事先将文字转成图片保存,用的时候再载入。这样能写的文字就有限了,还要携带大量可能也可能用不到的数据。
---------------
我初中的时候学校里学过vb6.0,现在业余自学vb.net,c++也在接触。寒假时间又迷上写码了,这个文字转位图的问题一直头疼了好久。。。
2017年01月23日 15点01分 1
level 9
dim g as graphics=graphics.fromimage()
g.drawstring
2017年01月24日 00点01分 2
可是用这个方法就必须要直接显示在界面上,没办法对文字再处理,
2017年01月24日 09点01分
level 4
已经弄到办法读取字库了,但是区位码不知道怎么算,在c++里面得用到指针,但是vb.net不知道怎么做。。。。
2017年01月24日 10点01分 3
level 4
哈哈,搞定了♬(ノ゜∇゜)ノ♩
Public Class Pixel_TXT Private Declare Sub mm8_16 Lib "kernel32" Alias "RtlMoveMemory" (ByRef Destinatin As Byte, ByRef Source As Int16, ByVal Length As Integer) Private Declare Sub mm8_8 Lib "kernel32" Alias "RtlMoveMemory" (ByRef Destinatin As Byte, ByRef Source As Byte, ByVal Length As Integer) Public HZKstr As String = "F:\VS2010\0\HC\HC\bin\Debug\HZK16" '需要自己下载文件呢,不过也只有292K大小而已 Public Sub SSS(ByRef A(,,) As Byte) Dim G As Integer = Asc("你") - &HFFFFA0A0 '计算区位码(&HFFFFA0A0的值-24416 ) Dim GH(1) As Byte mm8_16(GH(0), G, 2) '拆分数据的高低位置 Dim H As Integer = (94 * (GH(1) - 1) + (GH(0) - 1)) * 32 '计算起始位置 HZK16(A, H) '读取 End Sub Public Sub HZK16(ByRef Arr(,,) As Byte, ByVal L As Integer) Dim G, D As Integer '循环计算用 Dim fs As New System.IO.FileStream(HZKstr, IO.FileMode.Open, IO.FileAccess.Read) 'Dim fs As New System.IO.FileStream(HZKstr, 3, 1) Dim br As New System.IO.BinaryReader(fs) Dim A() As Byte '获取用数组 Dim B() As Byte '二进制提取计算用数组 Dim C() As Byte '绘制1维掩码图数组 br.BaseStream.Position = L '从指定位置开始 A = br.ReadBytes(32) '读取指定长度到数组A((16*16的点阵图)÷一个字节8位) ReDim C(255) '重置缓存K以保证绘制正确 For i As Integer = 0 To 31 '开始绘制1维掩码图 ReDim B(7) D = 7 Do While A(i) > 0 '二进制提取计算 B(D) = IIf((A(i) Mod 2) = 1, 255, 0) A(i) = A(i) \ 2 D = D - 1 Loop mm8_8(C(i * 8), B(0), 8) '把B数组复制进C数组 Next G = 0 For j As Integer = 0 To 15 For i As Integer = 0 To 15 Arr(j, i, 3) = C(G) '1维转2维BGRA位图 G = G + 1 Next Next br.Close() fs.Close() End Sub End Class
2017年01月24日 14点01分 4
气人!空格和换行都被度娘给私自去掉了233
2017年01月24日 14点01分
我用的是VS2010,改一改,到vb6.0应该也是可以。
2017年01月24日 14点01分
level 4
发现了个问题,这个只能写汉字和汉字的标点,但是写英文和数字就会出错_(:з」∠)_
233继续改进
2017年01月24日 14点01分 7
level 4
对于字母和数组,加一个判断就好了,如图
----------
我把绘制放到其它函数了,先扩展1像素画上黑灰色渐变,然后再原始像素画白灰渐变,看看漂亮
----------
这个函数之所以写成这样,是为了加速运算,是为了我的另一个类服务。所以想要借用的人切勿跟我一样,要看具体情况。
2017年01月26日 15点01分 9
有些注解忘记修改了,关于mm8_8和mm8_16其实是内存复制数组用的API,我上一楼里面有写到。
2017年01月26日 15点01分
说错了是上上楼
2017年01月26日 15点01分
level 4
谢谢 __暗_月 的帮忙
哎,,Ծ^Ծ,,这里人不多啊!
话说我告诉你们我现在是动漫专业(画画)的有人信吗?但是我从小的个梦想一定要自己做一个属于自己的游戏,代码和美术和音效和编剧统统由自己完成!!!,但是路还很远啊!
2017年01月26日 16点01分 10
level 13
一句 DrawText 完成的事情... 楼主何苦呢?
_
2017年01月28日 15点01分 11
是啊,貌似被层主带歪了
2017年01月30日 17点01分
level 9
使用你说的第二种方法就行,在内存中建立一个人drawingvisual不一定要显示出来,对界面也没有任何影响,然后把drawingvisual保存为本地图片就行了。
2017年01月30日 17点01分 12
1