WPF的bmp和二进制转换

bmp转二进制:

1
2
3
FileStream fs = File.OpenRead(filepath); //filepath文件路径
Byte[] tempBuff = new Byte[fs.Length];
fs.Read(tempBuff, 0, tempBuff.Length);

二进制还原bmp:

1
2
3
4
5
BitmapImage BI = new BitmapImage();
BI.BeginInit();
BI.StreamSource = new MemoryStream(bufPic); //bufPic是图片二进制,byte类型
BI.EndInit();
image_emp.Source = BI;//image_emp是图片控件

BMP格式分析

C#下将BMP转换成二进制是比较容易的,方法如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
byte[] bufPic;
string filePath = "";
Stream myStream;
MemoryStream picFile = new MemoryStream();
OpenFileDialog open = new OpenFileDialog();
open.Filter = "bmp files (*.bmp) | *.bmp";
open.RestoreDirectory = true;
if (open.ShowDialog() == DialogResult.OK)
{
if ((myStream = login.OpenFile()) != null)
{
myStream.Close();
}
}

filePath = open.FileName.ToString();
Image image = Image.FromFile(filePath);
image.Save(picFile, ImageFormat.Bmp);
bufPic = picFile.GetBuffer();

其实转换的结果是以8位二进制分割的十进制数(0~255),若是真要得到纯二进制,还需要进一步转换。我曾做过很多实验,目的是测试这些数字和图片本身之间的关系,虽然学习过多媒体技术,但是对于详细的bmp分解,并没有太多认识。当然,在实验前还要把”二进制”还原bmp的方法说明一下:

1
2
3
4
5
6
7
8
using (MemoryStream ms = new MemoryStream(myPic))
{
Image image1 = Image.FromStream(ms);
ms.Close();
pic.Image = image1;
}

//其中mypic是byte类型,存放"二进制"的数组,pic是PictureBox控件

实验1: 人为的变动bufPic数组中的前几个位置,得到的结果都是出错,没能正确的还原回bmp,仔细观察后在发现,几乎所有的bmp转换成的bufPIc的前几个位置都相同,所以得到一个猜测:bmp文件不是单一的由图片的像素组成,还有一些默认的统一的”约定”

阅读更多

玩转IPv6

前段时间小结了一下 IPv6的相关设置和用途,比如免费上网,下载IPv6资源等。经过近一年的使用,对于IPv6有了更进一步的认识,恰逢csdn学习心得活动,所以特意整理一番,针对使用IPv6做一个全面的介绍。不足之处还请大家提出宝贵意见。

一、引导篇

1. 什么是IPv6

互联网协议版本6(IPv6)是被指定为IPv4继任者的下一代互联网协议版本,互联网中最先出现的应用到现在依然占有优势。这是个用于分组交换互联网络的网络层协议。驱使重新设计互联网协议的主要原因是,IPv4地址在可预见的未来中即将被耗尽。IPv6在1998年12月被互联网工程任务小组(Internet Engineering Task Force,简称IETF)通过公布互联网标准规范(RFC 2460)的方式定义出台。

IPv6具有比IPv4大得多的地址空间。这是因为IPv6使用了128比特的地址,而IPv4只用32比特。因此新增的地址空间支持2128(约3.4 ×1038)个地址。这一扩展提供了灵活的地址分配以及路由转发,并消除了对网络地址转换(NAT)的依赖。NAT是获得了广泛部署的减缓IPv4地址耗尽的最有效的方式。

阅读更多

ADO.net存取image类型

最近试验需求,用到了sql server中的image字段,存取方法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public void Save()
{
using (System.IO.FileStream stream = new System.IO.FileStream())
{
byte[] buffer = new byte[stream.Length];
stream.Read(buffer, 0, (int)stream.Length);
stream.Close();
string strName = System.IO.Path.GetFileNameWithoutExtension(file);
SqlCommand cmd = new SqlCommand("Insert into Temp(name,photo) values(@name,@image)", sqlConn);
cmd.Parameters.Add("@name", SqlDbType.VarChar).Value = strName;
cmd.Parameters.Add("@image", SqlDbType.Image).Value = buffer;
cmd.ExecuteNonQuery();
}
}

取:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public void GetImage()
{
SqlCommand cmd = new SqlCommand(@"SELECT name, photo FROM Temp", sqlConn);
sqlConn.Open();
SqlDataReader reader = cmd.ExecuteReader();
if (reader.Read())
{
image_filename = (string)reader.GetValue(0);
byte[] image_bytes = (byte[])reader.GetValue(1);
MemoryStream ms = new MemoryStream(image_bytes);
Bitmap bmap = new Bitmap(ms);
return bmap;

}
}
阅读更多

安装Win7进RAM

以前看过别人将XP装进内存,开机5-8秒, 于是无聊着尝试了将win7装进内存。

需要的东西有: 至少4g的内存, win7精简版(1.3G)

http://blog.163.com/prosen@yeah/blog/static/122513287201082992043836/

步骤:

1.安装FiraDisk驱动: 打开”设备管理器”—————–菜单栏—————–操作—————–添加过时硬件—————–选择FiraDisk中的firadish.inf

阅读更多

混沌序列

最近做信息安全方面的项目,看到一些关于混沌变换的论文,总结一番。

关于混沌

如果一个系统的演变过程对初始的状态十分敏感,就把这个系统称为是混沌系统。

在1972年12月29日,美国麻省理工教授、混沌学开创人之一E.N.洛仑兹在美国科学发展学会第139次会议上发表了题为《蝴蝶效应》的论文,提出一个貌似荒谬的论断:在巴西一只蝴蝶翅膀的拍打能在美国得克萨斯州产生一个龙卷风,并由此提出了天气的不可准确预报性。至此以后,人们对于混沌学研究的兴趣十分浓厚,今天,伴随着计算机等技术的飞速进步,混沌学已发展成为一门影响深远、发展迅速的前沿科学。

混沌来自于非线性动力系统,而动力系统又描述的是任意随时间变化的过程,这个过程是确定性的、类似随机的、非周期的、具有收敛性的,并且对于初始值有极敏感的依赖性。而这些特性正符合序列密码的要求。19**Robert Matthews在Logistic映射的变形基础上给出了用于加密的伪随机数序列生成函数,其后混沌密码学及混沌密码分析等便相继发展起来。混沌流密码系统的设计主要采用以下几种混沌映射:一维Logistic映射、二维He’non映射、三维Lorenz映射、逐段线性混沌映射、逐段非线性混沌映射等,在本文中,我们主要探讨一维Logistic映射的一些特性。

阅读更多

凯撒密码(一)

  “恺撒密码”据传是古罗马恺撒大帝用来保护重要军情的加密系统。(即今天我们所说的:替代密码)

  它是一种代换密码,通过将字母按顺序推后起3位起到加密作用,如将字母A换作字母D,将字母B换作字母E。据说恺撒是率先使用加密函的古代将领之一,因此这种加密方法被称为恺撒密码。

  假如有这样一条指令:

  明文(小写):ji xiao jing

  用恺撒密码加密后就成为:

阅读更多

凯撒密码(二)

上篇显示了用错误的key得到了错误的结果,现在使用正确的key

这样就得到了正确的结果。

当然,这个程序只是演示凯撒密码的一个思路,没有对其他符号加密,这样有个很严重的后果,就是很key容易被破解。

举例:(key是*不告诉你,嘿嘿)

阅读更多

C#网页自动填表自动登录

自动填表的方式有很多,关键是获取控件的id或者name。

比如源代码有

1
<input id="pwdInput" tabindex="2" class="ipt-t" type="password" name="password" onMouseOver="fEvent('mouseover',this)" onFocus="fEvent('focus',this)" onBlur="fEvent('blur',this)" onMouseOut="fEvent('mouseout',this)"/>

那么就可以用

1
2
3
4
5
6
7
8
9
10
HtmlDocument doc = webBrowser1.Document;
foreach (HtmlElement em in doc.All)
{
string str = em.Id;
if (str == "pwdInput")
{
em.SetAttribute("value", "abc"); break;

}
}
阅读更多

C#实现扫雷游戏中左右键同时点击

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
private MouseButtons Button;
private long Ticks;
private long TicksDelay = 100000L;

private void btn_Click(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
if (DateTime.Now.Ticks - Ticks < TicksDelay && Button == MouseButtons.Right)
{
//左右键"同时"(先左后右)

}
else
{
//左键

}
}
else if (e.Button == MouseButtons.Right)
{
if (DateTime.Now.Ticks - Ticks < TicksDelay && Button == MouseButtons.Left)
{
//左右键"同时"(先右后左)

}
else
{
//右键

}
}
Button = e.Button;
Ticks = DateTime.Now.Ticks;

}