使用0和1画图是种怎样的体验?


前言

美丽的图片,悦耳的歌声还有各种各样欧美日韩的视频资源都可以利用计算机和互联网传输播放,给21世纪的我们带来了超乎寻常的便利。咳咳咳!我是个正经人。


那么这都是怎么实现的呢?


一、数据编码


实际上,所有的图像、声音和视频的处理都是以二进制的形式存在于电脑硬件上的。可以理解为硬件本身只能够处理0和1两个数。


图像,音视频的传输具体的过程可以参看下面这个视频

音视频在互联网上的传输




二、用0和1画图

1.介绍一个好用的学习网站


一个部分需要科学上网的网站
code.org
这个网站是美帝用来进行K12学段代码教育的公益网站,比较适合初学者补基础。需要先注册登录

画图教程地址:
教程

我们将使用二进制绘画PNG图片
什么是PNG?




2.RGB介绍

RGB色彩模式是工业界的一种颜色标准,是通过对红®、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是运用最广的颜色系统之一。

RGB详解




3.画图

掌握基础之后我们就来实践:

我们先确认画纸的大小

我定了一张宽28格,长14格的画纸。

二进制宽即为:0001 1100
二进制长即为:0000 1110

我们接着定颜色的数量。我这人比较喜欢艳俗,所以我就定了一个12位的RGB。那么为了方便我操作,我把二进制转成十六进制表示再去画图可以少输入很多字符:

在这里插入图片描述
我们可以看到宽度0001 1100转为十六进制是1C
长度0000 1110转为十六进制是0E

我先把这张画纸全图白了,每个格子对应地就填上了 1111 1111 1111即把最高亮度的红、绿、蓝混一起,那么就是白色块,十六进制表示为FFF

我先把位置定好,就用黑色块先画

在这里插入图片描述

黑色是把所有色彩的亮度调到最低,即
0000 0000 0000十六进制表示为 000

再接着,我要上黄色和绿色了。想要生活开心点,那就搞点黄色和绿色

在这里插入图片描述
细心的你一定会发现我画出了蓝色重影的效果。这其实是我的一个误操作导致的。

我本想这一个色块一个色块地改成我想要的颜色,奈何我的审美实在糟糕。在涂到S这个字样的时候我就失去了耐心,在第四行第十个格子前多敲了一个A,导致了所有色块对应的编码整体迁移。

我们看下此时的二进制编码:

在这里插入图片描述



总结

用0和1画PNG图,实际上就是在不同的位置根据需要填入0和1。步骤是先用二进制数定长宽,再用二进制数定RGB的数位。再之后把RGB对应的色彩块填入。1是填,0是不填。如果位数太多,可以使用十六进制减少操作的数位。




基础自测题


1. 110101010001转十六进制是多少?

技巧(四位二进制数对应一位十六进制数)
答案:D51

2.有什么最快的计算方法能得到结果?

答案:四位二进制数对应一位十六进制数

3.101011.101011对应的十进制数是多少?

答案:25+23+21+20+2-1+2-3+2-5+2-6=43.796875

4.常⻅的音频编码格式有哪些?

这篇文章介绍得比较详细 常见的音频编码格式

5.常⻅的视频编码格式有哪些?

这篇文章介绍得比较详细 常见的视频编码格式

3.一个尺寸8×8大小的png全黑图片前四个字节的十六进制值是什么?

0808

4.UTF8三字节的编码方式为:1110xxxx 10xxxxxx 10xxxxxx,汉字【中】的Unicode编码十六进制值是0x4e2d,Unicode编码按三字节编码转换到十六进制的UTF8编码的计算过程是什么?

推荐这篇文章 UTF-8的汉字三字节码与Unicode编码转换

5.如果要提供一个实时的流媒体服务器,除了ffmpeg,还需要使用哪个组件?

答案:ffserver

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
QT是一强大的跨平台应用程序开发框架,它提供了丰富的图形用户界面(GUI)组件和功能。在QT中使用鼠标进行拖拽画图是一项常见的任务。下面我来简单介绍一下如何实现这个功能。 首先,我们需要在Qt中创建一个QWidget或QGraphicsView作为画布,用于显示绘制的图形。然后,我们需要重写该小部件的鼠标事件处理函数,以便在鼠标按下、移动和释放时进行相应的操作。 在鼠标按下事件中,我们需要获取鼠标的起始位置,并将其保存下来。这可以通过重写鼠标按下事件处理函数,并通过QMouseEvent对象的pos()函数来获取。 然后,在鼠标移动事件中,我们需要获取当前的鼠标位置,并使用起始位置与当前位置的差值来计算出鼠标的位移量。通过这个位移量,我们可以相应地绘制图形或移动已有的图形。这可以通过重写鼠标移动事件处理函数,并使用QMouseEvent对象的pos()函数来获取当前鼠标位置,然后进行相应的计算和绘制操作。 最后,在鼠标释放事件中,我们需要进行一些清理工作,例如保存绘制的图形或完成某个绘制动作。这可以通过重写鼠标释放事件处理函数来实现。 为了实现画图的功能,我们可以使用QPainter类进行绘制操作。通过调用QPainter对象的各绘制函数,我们可以在画布上绘制出直线、曲线、矩形、圆形等各图形。 综上所述,通过重写鼠标事件处理函数和使用QPainter类,我们可以在QT中使用鼠标进行拖拽画图。这样用户可以通过鼠标操作,在画布上自由绘制各图形。不仅可以提供良好的用户体验,还可以满足用户对图形绘制的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盛世危言

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值