https://www.cnblogs.com/luxiaoxun/p/3378416.html
http://www.cnblogs.com/wifi/articles/3522773.html
https://blog.csdn.net/uiwgi/article/details/53201551
一、互转
1.1、图片.png .jpg .bmp等与字节byte[]的互转
#region 字节与图片的互转
using System;
using System.Collections;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace QueueSample
{
class Program
{
static void Main(string[] args)
{
string path = @"C:\Users\lanmage2\Desktop\aaa.jpg";
ImageConvertToByte(path);
ImageConvertToByte(ImageConvertToByte(path));
Console.ReadLine();
}
/// <summary>
/// 图片转字节
/// </summary>
/// <param name="Path"></param>
/// <returns></returns>
static byte[] ImageConvertToByte(string Path)
{
FileStream fs = new FileStream(Path, FileMode.Open, FileAccess.Read);
Byte[] btye2 = new byte[fs.Length];
fs.Read(btye2, 0, Convert.ToInt32(fs.Length));
fs.Close();
return btye2;
}
/// <summary>
/// 字节转图片
/// </summary>
/// <param name="ImageByte"></param>
/// <returns></returns>
static Image ImageConvertToByte(byte[] ImageByte)
{
System.IO.MemoryStream ms = new System.IO.MemoryStream(ImageByte);
Image img = Image.FromStream(ms);
img.Save(@"C:\Users\lanmage2\Desktop\aaa22", System.Drawing.Imaging.ImageFormat.Bmp);
return img;
}
}
}
1.2、.dcm/.raw等等文件与字节byte[]的互转
医学上,我们往往需要将字节与.dcm等文件互相转换,其主要用到了System.Windows.Forms.SaveFileDialog。
#region .dcm与字节的互转
using System;
using System.Collections;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace QueueSample
{
class Program
{
static void Main(string[] args)
{
string path = @"C:\Users\lanmage2\Desktop\11.dcm";
ByteConvertToImage(ImageConvertToByte(path));
Console.ReadLine();
}
/// <summary>
/// 图片转字节
/// </summary>
/// <param name="Path"></param>
/// <returns></returns>
static byte[] ImageConvertToByte(string Path)
{
FileStream fs = new FileStream(Path, FileMode.Open, FileAccess.Read);
Byte[] btye2 = new byte[fs.Length];
fs.Read(btye2, 0, Convert.ToInt32(fs.Length));
fs.Close();
return btye2;
}
/// <summary>
/// 字节转图片
/// </summary>
/// <param name="ImageByte"></param>
/// <returns></returns>
static void ByteConvertToImage(byte[] bytContent)
{
System.Windows.Forms.SaveFileDialog save = new System.Windows.Forms.SaveFileDialog();//核心1
save.Filter = "dcm文件|*.dcm";//筛选
save.FileName = @"C:\Users\lanmage2\Desktop\22.dcm";//保存文件的名字
App.Current.Dispatcher.Invoke((Action)delegate ()//STA问题自己百度解决吧。
{
if (save.ShowDialog() == System.Windows.Forms.DialogResult.OK)//打开对话框
{
byte[] buffer = new byte[0];
buffer = bytContent;
System.IO.File.WriteAllBytes(save.FileName, buffer);//核心2
}
});
}
}
}
#endregion
1.3、打开文件
System.Windows.Forms.OpenFileDialog
/// <summary>
/// 点击加载一张Dicom图:主要用来测试
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OpenDicom_Click(object sender, RoutedEventArgs e)
{
System.Windows.Forms.OpenFileDialog open = new System.Windows.Forms.OpenFileDialog();
open.Filter = "DCM图像文件|*.dcm";
open.RestoreDirectory = false;
if (open.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
handle.PutImage(this.imageview, open.FileName, ref m_cDicomFile);
}
//适应窗口
imageview.FtsImage();
this.imageview.Invalidate();
//隐藏视频监控窗口
this.imgDisPlay.Visibility = Visibility.Hidden;
this.host.Visibility = Visibility.Visible;
}
二、可是我还想知道,不同格式图片转成字节后的数据结构是不是一样
图片,都由一定的数据结构组成。于是,我想看看.png .jpg .bmp等转成字节后,数据结构是不是一样。显然,是不一样的。
参考https://blog.csdn.net/sj_wll/article/details/81075930
https://blog.csdn.net/u012611878/article/details/52215985
1、文件头部标识
图片文件的格式结果中,在头部信息(一般都会在图片文件最开始的几个字节)中都会包含图片的格式信息。下面就列车常用的这几种格式图片的头部信息标识(十六进制)。
Png图片文件包括8字节:89 50 4E 47 0D 0A 1A 0A。即为 .PNG….。
Jpg图片文件包括2字节:FF D8。
Gif图片文件包括6字节:47 49 46 38 39|37 61 。即为 GIF89(7)a。
Bmp图片文件包括2字节:42 4D。即为 BM。
2、改后缀并不能改变头部的格式
我们不能单纯的用文件后缀名.png、.jpg、.jpeg、.gif、.bmp来区分图片格式,因为实际上我们可以直接修改图片后缀名,修改后缀名并不能修改图片的格式,图片还是保持它原来的格式。
3、我们来上面例子,来验证一下头部结构
3.1、.jpg
255对应了十六进制的FF,216对应了十六进制的D8。所以jpg图片的格式正确。
3.2、.png
137对应了十六进制的89,80对应了十六进制的50。所以png图片的格式正确。
3.3、.bmp
66对应了十六进制的42,77对应了十六进制的4D。所以bmp图片的格式正确。
3.4、.MemoryBmp和png一样
3.5、.GIf
4、小结
同样的一张图片,经过下面操作后:
1、jpg转成png之后,字节长度由65183变成了115661
2、然后,png转成bmp之后,字节长度由115661变成了10627726。