位图

SPI方式读取汉字字库芯片

匿名 (未验证) 提交于 2019-12-03 00:36:02
需求: 在液晶屏上显示指定的汉字 方案1:以带有汉字的图片形式显示 否定原因: 1)在画面展示时,会覆盖显示背景,不美观协调 2)需要先由图片格式转换成位图格式,不连贯,不方便 方案2:通过直接读取汉字字库芯片获得位图数据进行显示 选择原因: 1)在画面展示时,不会覆盖显示背景,美观协调 2)直接获取位图格式数据,连贯,方便 选定方案2后,硬件方面,需要在主板(还是背板?)上增加汉字字库芯片模块 汉字字库芯片使用方法(芯片厂家说明书上是这么说的): 1)得到指定汉字对应的内码 2)通过本手册提供的方法计算出在芯片内的地址 3)即可从地址连续读出字符点阵数据 字库芯片驱动: 1)SPI总线接口的初始化(尤其是MOSI/MISO/SCLK/CS#引脚的对应) 2)SPI读写函数 实际上,可从芯片厂家处获取相关库文件(.lib),直接调用库函数即可获取相应点阵数据,以12*12点阵函数为例: void gt_12_GetData (unsigned char MSB,unsigned char LSB,unsigned char *DZ_Data); 汉字内码的获取方法: 汉字字符串在寄存器以内码形式存储,通过unsigned char *指针,指向指定的汉字字符串(例:“中国长城”) 得到点阵数据后,根据厂家的字符排列格式(一般为横置横排)编写对应的代码。 本工程的主要工作即如上所述。

bmp格式研究

匿名 (未验证) 提交于 2019-12-03 00:34:01
使用 HexEditor Neo 工具 查看 生成的 BMP文件: 看图: 图中的 0x00 到 0x35 共0x36个字节,0x36 = 54 为 BMP 文件头。 接下来的为调色板: 4个字节为00 00 00 00 对应:00000000( 数值:0x00000000) 黑色 再接下来的 4个字节为FF FF FF 00 对应: FFFFFF00 ( 数值:0x00FFFFFF) 白色 调试板之后的为象素数据: 0F F0 FE 00 对应的是 最下面一行: BMP数据如下: 42 4 d 5 e 00 00 00 00 00 00 00 3 e 00 00 00 28 00 00 00 18 00 00 00 08 00 00 00 01 00 01 00 00 00 00 00 20 00 00 00 c3 0 e 00 00 c3 0 e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff 00 0f f0 fe 00 7f 3f 1f 00 fe fc f8 00 55 0f aa 00 80 ff ff 00 fc f8 f0 00 ff 00 ff 00 00 ff 00 00 Bmp格式,关于BITMAPFILEHEADER 和 BITMAPINFOHEADER 不说了,网络上全都有。 从0x36字节开始说起

IO多路转接------select

匿名 (未验证) 提交于 2019-12-03 00:32:02
五种IO模型 一文中介绍了五种IO模型。在数据通信过程中,分为两部分:一个是等待数据到达内核,一个是将数据从内核拷贝到用户区。在实际应用中,等待的时间往往比拷贝的时间多,所以要提高IO的效率,就要减少等的比重。在阻塞IO,非阻塞IO,信号驱动IO和异步IO中,虽然等待的方式或等待的主体不同,但是无论是谁在等,无论如何等,等待的时间总长是不变的。 五种IO模型 一文中提到,在服务器与客户端进行通信时,服务器要处理多客户端的情形。所以服务器程序首先要使用selcet等系统调用一次等待多个文件描述符,当至少有一个文件描述符满足就绪条件时,select返回,然后进程调用read对满足就绪条件的文件描述符进行读写。将满足就绪条件的所有文件描述符处理完之后,之前的客户端可能还会再次发送消息,所以,此时就需要不断调用select来循环式的等待满足就绪条件的文件描述符,然后对其进行处理。 select #include <sys/select.h> int select(int nfds, fd_set *readfds, fd_set *writefds,fd_set *exceptfds, struct timeval *timeout); 参数说明: nfds :表示一次等待的文件描述符的个数加1;用于限定操作系统遍历的区间 fd_set :该结构实际是一个位图,因为文件描述符其实是数组下标

大数据去重――位图

匿名 (未验证) 提交于 2019-12-03 00:25:02
100亿整型数据去重? 整型数据为32位最多有2^32(42亿多),所以100亿整型数据一定有重复的,2^32个整形用位表示,需要(2^32)bit==512MB,需要512MB内存表示。 下面是去重算法: #include <stdio.h> #include <stdlib.h> #define MAX (0xffffffff) void setBuf(char *buf, unsigned int num) { *(buf+(num>>0x3)) |= (0x1<<(num&0x7)); return; } unsigned int getBuf(char *buf, int num) { unsigned int flag = 0; flag = ((*(buf+(num>>0x3)) & (0x1<<(num&0x7))) != 0)? 1:0; return flag; } int main(int argc,char **argv) { if(argc < 2) { printf("usage:./a {0-9}*\n"); return 0; } unsigned int index = 1; unsigned int num; unsigned int max = 0; char* buf = (char*)calloc((MAX>>0x3)+1,sizeof

λͼ

匿名 (未验证) 提交于 2019-12-03 00:19:01
λͼ 所谓 λͼ (bitmap),是用每一位来存放某种状态,适用于大规模数据,但数据状态又不是很多的情况。通常是用来判断某个数据存不存在的。 例如,要判断一千万个人的状态,每个人只有两种状态:男人,女人,可以用0,1表示。那么就可以开一个int数组,一个int有32个位,就可以表示32个人。操作的时候可以使用位操作。 使用位图法判断整形数组是否存在重复 判断集合中存在重复是常见编程任务之一,当集合中数据量比较大时我们通常希望少进行几次扫描,这时双重循环法就不可取了。位图法比较适合于这种情况,它的做法是按照集合中最大元素max创建一个长度为max+1的新数组,然后再次扫描原数组,遇到几就给新数组的第几位置上1,如遇到 5就给新数组的第六个元素置1,这样下次再遇到5想置位时发现新数组的第六个元素已经是1了,这说明这次的数据肯定和以前的数据存在着重复。这种给新数组初始化时置零其后置一的做法类似于位图的处理方法故称位图法。它的运算次数最坏的情况为2N。如果已知数组的最大值即能事先给新数组定长的话效率还能提高一倍。 代码如下: BitMap.h #pragma once #include<stdio.h> #include<stdlib.h> #include<assert.h> typedef struct BitMap { int *_bmp; int _capacity; /

位图内存管理

匿名 (未验证) 提交于 2019-12-03 00:19:01
最近看代码看到位图内存管理,在网上搜了下相关的资料,然后热度第一的csdn的一篇帖子上面解释的很难理解,叙述的也存在一些问题,后来找到很久的其他帖子,终于明白了,所以mark一下。 还使用二进制来表示内存的使用状态,就是1是‘占用了’,0是‘未占用’。上面的4个数组就是用来表示整数0-255使用8位(一个字节)的内存占用情况的。 首先,选取一个0-255之间的数字,我幸运数字12,那就12吧,12用8位二进制表示就是 0000 1100,先来讲第一个数组firstHoleSize,第一个数组的作用就是表示整数0-255用8位二进制表示的时候【从右到左开始看未被占用位数】有几位(注意:就是遇到1就不数了,有的文章里面喜欢称呼为‘洞’),0000 1100从右到左在遇到1之前0的位数为两位,那firstHoleSize[12]就是2,看下数组里面是不是。类似,22 用二进制表示为 0001 0110,从右到左遇到1之前0的位数为1,所以firstHoleSize[22]就是1。另外,如果是奇数的话,二进制最后一位肯定就是1,那么所有奇数的firstHoleSize都是0。 第二个数组与第一数组不同是从左数到右,方法与从右到左一致,特殊的就是如果数的大小大于等于2^7=128的话,那最左一位就是1,那么lastHoleSize[n](n>127)都是0 第三个表示的连续的最多位0(最大洞

数据结构之哈希变形――位图

匿名 (未验证) 提交于 2019-12-03 00:18:01
背景:海量数据处理 笔试题:给四十亿不重复的无符号,整形,没排过序。给一个无符号整数,如何快速判断一个数是否在这四十亿个数中 在这里我们就可以用到我们的哈希思想。 位图:我们只需要表示这个数字存不存在的话,只需要一个比特位即可,所以我们用一个数组来装元素的个数,每个元素都有八个比特位,那么就可以表示八个数字【(用uint64_t的话),因为uint64_t不论在多少位机子下都是八字节】 这样就可以轻松解决问题 下面是代码具体实现 bitmap.h #pragma once #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stddef.h> #include <unistd.h> #include <stdint.h> typedef uint64_t bitmaptype; typedef struct bitmap{ bitmaptype *data; uint64_t capacity; }bitmap; void bitmapinit(bitmap *bm,uint64_t capacity); void bitmapdestroy(bitmap *bm); void bitmapset(bitmap *bm,uint64_t index); void bitmapunset

CAD使用控件把DWG文件转成位图

匿名 (未验证) 提交于 2019-12-02 23:47:01
说明 CAD控件提供的接口,可以把dwg文件转换成Bmp,Jpg文件,也可以把DWG文件中某个区域的图形绘制到CDC上或保存为Bmp文件。这些接口即能在VC中使用,也能在VB,C#,Delphi,网页中调用。 DwgToJpg 不需要使用CAD控件打开dwg文件,直接把dwg文件转成jpg文件。 MxDrawXLib.IMxDrawApplication 的成员 pszDwgFilePath pszJpgFilePath iWidth iHeight VC调用参考例程: void CTestDlg::OnBnClickedDwgtojpgButton() { // TODO: CPreviewFileDialog openDlg(TRUE,_T("dwg"),NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, //_T("dwg(*.dwg) | *.dwg||"), _T("DWG files (*.dwg)|*.dwg|DXF files (*.dxf)|*.dxf|Jpg files (*.jpg)|*.jpg|BMP files (*.bmp)|*.bmp||"), this); CString sDwgFileName; if(openDlg.DoModal() == IDOK) { sDwgFileName = openDlg

OpenGL ES 纹理基础

和自甴很熟 提交于 2019-12-02 14:42:29
位图 位图是一系列的 0 和 1, 表示打开或关闭的像素值 . 位图中 , 一块内存中的每个位正好对应于屏幕上的一个像素的状态 . 它可 以表示掩码 , 字体和字符多边形甚至是两色的抖动图像 . 像素图 与位图相比 , 像素图更有趣 , 用途更大 . 像素图在内存中的布局与位图相似 . 但是 , 它的每个像素可以由超过 1 个位的存储空 间表示 . 每个像素所多出来的这些位可以存储这个像素的强度 ( 有时候称为亮度值 ) 或颜色分值 . 和位图一样 , 我们也是在当 前的光栅位置上绘图像素图 , 但是需要使用一个新的函数来绘制 . void glDrawPixels ( GLsizei width, GLsizei height, GLenum format,GLenum type, const void *pixels); 来源: https://blog.csdn.net/qq_30124547/article/details/102776261

canvas绘制图片模糊

前提是你 提交于 2019-12-02 10:49:40
一、关于canvas (1)canvas绘制的是位图,而我们平常用的jpg,png也是位图。 位图又叫像素图或栅格图,它是通过记录图像中每一个点的颜色、深度等信息来存储和显示图像。具象一点讲,可以将位图想象成一个巨大的拼图,这个拼图有无数的拼块,每个拼块代表了一个纯色的像素点。理论上,1个位图像素对应着1个物理像素。 (2)canvas的width和height属性 <canvas width="600" height="300" style="width: 300px; height: 150px"></canvas> style中的width和height分别代表canvas这个元素在界面上所占据的宽高,即样式上的宽高 attribute中的width和height则代表canvas实际像素的宽高 canvas默认的width和height是300 * 150,对其设置了css之后,canvas会根据设置css宽高进行缩放(注意不是裁剪) 二、原因 因为 canvas 不是矢量图,而是像图片一样是位图模式的。高 dpi 显示设备意味着每平方英寸有更多的像素。也就是说二倍屏,浏览器就会以2个像素点的宽度来渲染一个像素,该 canvas 在 Retina 屏幕下相当于占据了2倍的空间,相当于图片被放大了一倍,因此绘制出来的图片文字等会变模糊。 三、解决 (1)在浏览器的