|
最近在搞LCD点陈显示,对于字模的生成与制做只能依靠第三方软件。这样有一个很大的不方便,软件是别人写的不可能完全满足自己的要球。并且要要求直接下载到显示屏上,上网搜了老半天,没搜到一个。没办法自力更生吧,发扬下优良传统吧。老规举,先是上网搜了一番。对了忘了说下,以前我学过一段时间的QT,希望用QT来完成。经过网上的一番苦苦搜索,也就搜到了几扁,总结一下基本就两点思路:一种是直接读取字库文件,这要求对这库文件的存储格式要有一定的了解,现在也没什么耐心去看这些东西。另一种是能过在IMAGE上绘单通道的图,然后提取位索引就行了。以下是大致思路和伪码。
对于QT绘画不想说的太多,学过的人应该都知道,没学过自己学学,对于QT绘画首先要重载重绘函数:paintEvent();QT绘可以直接在Widget绘制,还可以进行双绘冲绘制(先绘制在绘图设备上,如QImage,QPixmap等上然后再一次性的绘到相应的Widget去),本次就是先在QImage上绘,然后再进行位INDEX的读取,这个读取个人有个人的方法,要求也不一样,有的要倒序正取,有的要横向正取。就实际需求而变吧。以下是伪码了:
一、定义QImage
QImage image(32,32, QImage::Format_MonoLSB);
这里定义了一个32*32点的QImage,若是要求16*16点的也得定义成32*32点的,因为计算计是64位的一行最少得4个字节
到时候只提取自己需要的 那个16*16点就行了。
*******补充一点 Format_MononLSB是单通道的图像格式,一位保存一个PIX。QImage中还有一个相似的是
Format_Monon ,两都的区别在于一个是正充排列一个是倒序排列的。
二、定义自己的绘图设备
QPainter painter (&image);
看清楚了是在image上绘的哦,而不是在this上会的,这就是双缓冲绘图哦。
QRgb backColor = qRgb(255,255,255);定义自己的颜色
image.fill(backColor); 填充
三、开始绘制
painter.drawText (image.rect(), "袁");
四、好啦现在可以按自己的要求提取自己的字模啦
哈哈大家看的有点累了吧,下面让大家看下成果吧,以下是我用以上绘制字模截图。
(原文件名:ggggggggggggg.jpg)
以下是代码:
for(i=0;i<16;i++) { unsigned char *lineByte=image.scanLine(i); x=100; for(j=0;j<2;j++) { unsigned char tp; tp=lineByte[j]; for(z=0;z<8;z++) { if(tp&0x01) { paint.setPen(penR); paint.drawText(x,y,"1"); x+=10; } else { paint.setPen(penB); paint.drawText(x,y,"0"); x+=10; } tp>>=1; } } y+=10; }
这里只是给个大致的思路,兴趣的朋友可联系我一起探讨或留言 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|