前一段时间跳到一家医疗公司,叫我这边出一个c#版本预览工具研究了以下才发现其实就是按照高和宽去读取二进制流
废话不多说直接干代码
/// <summary>
/// 读取raw文件
/// </summary>
/// <param name="FileName">文件名称</param>
/// <param name="Width">宽度</param>
/// <param name="Height">高度</param>
/// <param name="MaxValue">最大值</param>
/// <param name="MinValue">最小值</param>
/// <returns></returns>
public static List<int[][]> ReadRawDatas(string FileName, int Width, int Height, out int MaxValue, out int MinValue)
{
MaxValue = 0;
MinValue = 65535;
ushort[] pix16;
ushort pixShort;
List<int[][]> results = new List<int[][]>();
using (BinaryReader br = new BinaryReader(File.Open(FileName, FileMode.Open)))
{
long iTotalSize = br.BaseStream.Length;
int iNumberOfPixels = (int)(iTotalSize / 2);
//通过宽高计算总图片个数
var total = iNumberOfPixels / (Width * Height) - 1;
pix16 = new ushort[iNumberOfPixels];
for (int i = 0; i < iNumberOfPixels; ++i)
{
pixShort = (ushort)(br.ReadUInt16());
pix16[i] = pixShort;
}
for (int t = 0; t < total; t++)
{
int[][] result = new int[Width][];
for (int i = 0; i < Width; i++)
{
result[i] = new int[Height];
}
for (int i = 0; i < Width; i++)
{
for (int j = 0; j < Height; j++)
{
var num = (i * Height + j) + (((Width - 1) * Height + (Height - 1)) * t);
//当前系数+上一幅的字节数
result[i][j] = (int)(pix16[num]);
if (MaxValue < result[i][j])
MaxValue = result[i][j];
if (MinValue > result[i][j])
MinValue = result[i][j];
}
}
results.Add(result);
}
}
return results;
}
效果