将二进制信息转为图像,我们可以约定0用蓝色圆点画、1用红色圆点画,除此之外我们还需要知道圆点的直径、左右间距、上下间距,这些信息都可以放在一个txt文件里,直接使用文本的格式来保存信息。这里我们约定文本文件第一行是圆点直径,第二行是圆点上下间距,第三行是圆点左右间距,从第四行开始是标识0和1。
所以我们随便写一个“TestFile.txt”的文本文件,它表明这个图像中圆点直径是20、左右间距和上下间距都是10。
最后绘制的效果如下:
这里我们先实现了将二进制01转为图像的基础功能,实际使用时还需要将绘制功能放到一个监控文件是否修改的线程里去,这样就能在检测到文件被修改后立即刷新图像。接下来需要做的就是将图片信息转为二进制内容,后续如何请继续关注我的博客吧。
完整代码如下
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
namespace DotSimulate
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//绘制一行的圆点
public void drawLine(string line, int x, int y, int diam, int zyGap) {
//创建GDI对像
Graphics g = this.CreateGraphics();
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
//填充的颜色
Brush bush0 = new SolidBrush(Color.Blue);
Brush bush1 = new SolidBrush(Color.Red);
for (int i = 0; i < line.Length;i++ )
{
char type = line;
if (type == '0')
{
g.FillEllipse(bush0, x, y, diam, diam);
x = x + zyGap + diam;
}
else {
g.FillEllipse(bush1, x, y, diam, diam);
x = x + zyGap + diam;
}
}
}
private void Form1_Load(object sender, EventArgs e)
{
//全屏
this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
//各项参数
int diam = 0;//直径
int sxGap = 0;//上下间距
int zyGap = 0;//左右间距
int x = 0;//当前x轴坐标
int y = 0;//当前y轴坐标
//按行读取文件
StreamReader sr = new StreamReader("TestFile.txt");
string line = "";
int count = 0;
while ((line = sr.ReadLine()) != null) {
//1 约定第一行是圆点直径
if(count == 0){
diam = int.Parse(line);
count++;
continue;
}
//2 约定第二行是圆点上下间距
if(count == 1){
sxGap = int.Parse(line);
count++;
continue;
}
//3 约定第三行是圆点左右间距
if (count == 2)
{
zyGap = int.Parse(line);
count++;
continue;
}
//4 从第四行开始是开始绘制圆点的01指示 0表示不绘制,1表示绘制,一次绘制一行
drawLine(line, x, y, diam, zyGap);
y = y + diam + sxGap;
}
}
}
}
curton 2019-5-22 08:14
curton 2019-4-24 17:15
givh79_163.com 2019-4-8 08:35