Linux
Midas-Zhou
GUI, Linux,E3D, 机器学习
展开
-
一种简单的图形旋转算法
图形旋转好玩又有实用性, 这里介绍一种简单的图形旋转算法.具体步骤如下:1. 首先将原图和旋转图的坐标原点都变换到图形的中心位置处.2. 历遍旋转图形中的每一个pixel, 将pixel的坐标(j,i)反向旋转映射到原图, 得到原图对应的坐标值(Xr,Yr).3. 考虑到旋转图的尺寸可能大于原图,这时需要检测(Xr,Yr)是否在原图范围内,如果不是,则忽略下面步骤.4. (Xr,Yr)通常并不是正好对应到原图中一个整点的像素, 而是会夹在四个像素中(如图), 对四个像素的位置进行插值计算(也即所原创 2022-04-07 12:38:36 · 4976 阅读 · 0 评论 -
一种简单的抗锯齿算法
在LCD等显示器上逐点绘制几何图像的时候, 往往对几何体的边缘采样不足, 这就会导致出现锯齿状不平滑的边缘. 为了尽量减弱这种现象,需要在斜线或物体边缘进行更密集的采样,然后根据一定的权重比例将色彩/亮度等值分配到周边象素点, 使得其看起来有平滑过渡的效果. 下面是一种简单的抗锯齿算法.原创 2022-03-07 14:16:22 · 3477 阅读 · 3 评论 -
一个简单的RingBuffer
写了一个简单的RingBuffer模块。 主要函数包括: egi_ringbuffer_create() (创建RingBuffer), egi_ringbuffer_free()(释放RingBuffer), egi_ringbuffer_write()(写入数据), egi_ringbuffer_read()(读出数据)。通过一个mutex互斥锁来同步,以实现多个线程同时写和读.。egi_ringbuffer.h/*--------------------------------...原创 2021-11-17 10:50:31 · 613 阅读 · 0 评论 -
EGI例子: EGI_FFFT快速傅立叶变换应用
EGI mat_egiFFFT()函数采用定点方式进行快速傅立叶变换,特别适用于那些没有FPU单元的处理器,可以加快其计算速度.当然,定点计算对FFT输入数据的数量和取值范围有一定的限制.应用mat_egiFFFT()函数可以制作一些有趣的小应用,比如从麦克风拾取声音数据,并实时展示其频谱,让我们可以看到音频的律动效果.下面是具体的代码和解释./*------------------------------------------------------------------This p原创 2021-02-04 16:11:55 · 568 阅读 · 0 评论 -
Linux: sed命令的使用
sed是linux下一个非常好用的流式编辑器(stream editor), 它通过一边传输一边过滤的方式来对文本进行编辑,我们可以对指定内容进行排除/选择/替换/删除/增加等操作,同时可以配合正则表达式来使用.sed是以行为单位进行处理的,可以利用管道设置进行多个sed串接处理.这样,只要从管道的一头输入原始文本,从另一头就可以输出得到我们所需要的数据和格式了.sed只是对输出流进行了处理,原始的文件可以保持不变.总结一下常用的sed命令, 以方便复习.1. sed对文本行的过滤和处理sed -原创 2021-01-04 11:26:51 · 443 阅读 · 0 评论 -
AES-256算法C语言实现
AES是美国确立的一种高级数据加密算法标准,它是一种对数据分组进行对称加密的算法,这种算法是由比利时的Joan Daemen和Vincent Rijmen设计的,因此又被称为RIJNDAE算法.根据密钥长度的不同,AES标准又区分为AES-128, AES-192, AES-256三种,密钥越长,对每一数据分组进行的加密步骤(加密轮数)也越多.AES-128/192/256分别对应10/12/14轮加密步骤. AES-256对应的密钥长度为256bits, 其每一数据分组都需要进行14轮的加密运算,(若将原创 2020-12-15 13:46:13 · 6044 阅读 · 2 评论 -
SHA-256算法C语言实现
SHA-256是一种安全散列(哈希)算法(Security Hash Algorithm),它可以将任意长度的输入信息转化成256位长度的哈希数值(也称作'消息摘要'或'印鉴').SHA-256通常用在数字签名和密码保护中,比如区块链. 我们可以用生成的哈希数值和原始的哈希数值作对比,这样不用查验信息具体内容即可验证信息是否被篡改过.网络上有很多关于SHA-256算法原理和基本步骤的文章,我参考了这一篇: https://qvault.io/2020/07/08/how-sha-2-works-step-原创 2020-12-07 11:14:01 · 2213 阅读 · 0 评论 -
采集并显示摄像头视频流的程序实例
V4L2是Linux为视频设备所提供的内核驱动和应用程序统一接口体系. 有了它,应用程序就可以通过调用设备接口控制函数ioctl(),来实现对视频设备的参数设置和数据操控.通过编写一个操作摄像头设备的程序实例,我们可以学习到应用V4L2系统的一般步骤和重点.1. 调用一个摄像头设备的控制函数ioctl(),主要涉及使用下面的一些控制代码(IOCT CODE):VIDIOC_QUERYCAP 查询设备驱动相关信息及支持的各项功能,返回struct v4l2_queryctrl, 包括驱动名称,硬件名称,.原创 2020-11-14 12:01:27 · 2106 阅读 · 0 评论 -
应用libmad制作一款mp3播放器
应用libmad制作一个mp3播放器MAD(libmad)是一款高质量的MPEG音频解码器,它支持MPEG-1,MPEG-2(LSF) 和所谓的MPEG-2.5格式(支持更低的采样率),并实现了各标准下所有三个层级的解码(Layer I, Layer II, and Layer...原创 2020-11-06 14:00:35 · 1225 阅读 · 0 评论 -
EGI基本图形库示例:Geometries
EGI是设计运行在OpenWRT环境下的一款开源嵌入式GUI, 简单好玩。用它可以来开发一些简单图形小界面,同时还可以加入声效背景,GIF动画等。EGI的基本图形库包含了点,直线,圆弧,三角形,矩形等各种常用的几何图形。下面是一个基本图形库示例。/*---------------------------------------------------------------------------This program is free software; you can redistribute原创 2020-07-25 14:36:04 · 727 阅读 · 0 评论 -
利用objcopy将文件附加到程序中
当我们编制的程序需要调用图片或者mp3等媒体文件时, 通常是将相应的文件预先存放在指定的目录位置,程序运行时才可以被找到.其实还有一种更方便的办法,那就是将音乐或者图像文件直接插入到程序文件的某个段中. 程序启动时,先将这些文件释放出来,然后主程序就可以使用它了. 这个方法在<<程序员的自我修养>>里面有阐述,但是它并没有具体说明如何将文件释放出...原创 2019-11-22 13:29:45 · 367 阅读 · 0 评论 -
一个简单的字符设备模块
一个简单的字符设备模块,包括设备文件的读写和ioctl等基本操作,可以作为模板来使用。在Openwrt-Widora Linux 3.18.29 和 Ubuntu 16.04 Linux 4.15.0-36 环境下都可以调试通过。 1. 内核模块 hello.c/*---------------------------------------------------------...原创 2018-11-03 17:38:34 · 308 阅读 · 0 评论