コード例 #1
0
        public static byte[] SaveFile(FileFormat fileFormat)
        {
            SPAHeader mainheader = new SPAHeader();

            //填充光谱文件信息
            mainheader.dataCount  = fileFormat.fileInfo.dataCount;
            mainheader.resolution = (int)(32768 / fileFormat.fileInfo.resolution);
            mainheader.firstx     = (float)fileFormat.dataInfo.firstX;
            mainheader.lastx      = (float)fileFormat.dataInfo.lastX;
            if (fileFormat.dataInfo.dataType == FileFormat.YAXISTYPE.YABSRB)
            {
                mainheader.yType = 0x0C;
            }
            else if (fileFormat.dataInfo.dataType == FileFormat.YAXISTYPE.YSCRF)
            {
                mainheader.yType = 0x0F;
            }
            mainheader.bgGrain     = (float)fileFormat.acquisitionInfo.GAIN;
            mainheader.lwn         = (float)fileFormat.acquisitionInfo.LWN;
            mainheader.sampleScans = fileFormat.acquisitionInfo.SCANS;
            mainheader.bgScans     = fileFormat.acquisitionInfo.SCANSBG;

            //读取光谱参数
            InstrumentHeader instPara = new InstrumentHeader();

            instPara.highFilter = (float)fileFormat.acquisitionInfo.HIGHPASS;
            instPara.lowFilter  = (float)fileFormat.acquisitionInfo.LOWPASS;


            return(CreateFile(mainheader, instPara, fileFormat.yDatas, fileFormat.fileInfo.fileMemo, fileFormat.fileInfo.instDescription));
        }
コード例 #2
0
        private static byte[] CreateFile(SPAHeader xPara, InstrumentHeader instPara, double[] yDatas, string fileTitle, string instSN)
        {
            IntPtr retptr   = IntPtr.Zero;
            int    datasize = 0;

            try
            {
                byte[] titleBytes = null;
                if (!string.IsNullOrWhiteSpace(fileTitle))
                {
                    titleBytes = Encoding.Default.GetBytes(fileTitle);
                }

                if (CommonMethod.Is64BitVersion())
                {
                    retptr = SPACreateFile64(ref xPara, ref instPara, yDatas, titleBytes, titleBytes == null ? 0 : titleBytes.Length, instSN, ref datasize);
                }
                else
                {
                    retptr = SPACreateFile32(ref xPara, ref instPara, yDatas, titleBytes, titleBytes == null ? 0 : titleBytes.Length, instSN, ref datasize);
                }

                return(CommonMethod.CopyDataArrayFromIntptrAndFree <byte>(ref retptr, datasize));
            }
            catch (Exception ex)
            {
                ErrorString = ex.Message;
                return(null);
            }
        }
コード例 #3
0
        /// <summary>
        /// 读取SPC文件头
        /// </summary>
        /// <param name="fileData">文件数据</param>
        /// <param name="fileSize">文件大小</param>
        /// <returns>SPCHeader结构</returns>
        private static SPAHeader GetXHeader(byte[] fileData, int fileSize)
        {
            try
            {
                IntPtr retptr   = IntPtr.Zero;
                int    datasize = 0;
                if (CommonMethod.Is64BitVersion())
                {
                    retptr = SPAGetXHeader64(fileData, fileSize, ref datasize);
                }
                else
                {
                    retptr = SPAGetXHeader32(fileData, fileSize, ref datasize);
                }

                bool      retOK;
                SPAHeader retheader = CommonMethod.CopyStructureFromIntptrAndFree <SPAHeader>(ref retptr, out retOK);
                if (!retOK)
                {
                    retheader.dataCount = int.MaxValue;     //表示错误数据
                }
                return(retheader);
            }
            catch (Exception ex)
            {
                ErrorString = ex.Message;
                SPAHeader retheader = new SPAHeader();
                retheader.dataCount = int.MaxValue;     //表示错误数据
                return(retheader);
            }
        }
コード例 #4
0
ファイル: HeaderViewModel.cs プロジェクト: snetskf/JCSPA
        public HeaderViewModel()
        {
            header = new SPAHeader(DateTime.Now.AddDays(-3));

            //  header.Creater = "Bhv";
            //  header.Creater = "Bhv";
            //Attachments =
            //new List<Attachments> { new Attachments { Filename = "test.txt", FileSize = "10mb", Creater = "B" },
            // new Attachments { Filename = "test2.txt", FileSize = "120mb", Creater = "2B" }
            //};
        }
コード例 #5
0
        /// <summary>
        /// 读取光谱文件
        /// </summary>
        public static bool ReadFile(byte[] fileData, int fileSize, FileFormat fileFormat)
        {
            fileFormat.dataInfoList    = null;
            fileFormat.acquisitionInfo = null;
            fileFormat.xDataList       = null;
            fileFormat.fileInfo        = null;
            fileFormat.yDataList       = null;

            SPAHeader mainheader = GetXHeader(fileData, fileSize);

            if (mainheader.dataCount == int.MaxValue)  //读取文件头错误
            {
                return(false);
            }

            //填充光谱文件信息
            fileFormat.fileInfo = new FileFormat.FileInfo();
            //fileFormat.fileInfo.createTime = CommonMethod.DWordToDateTime(0xD9A36D78);
            fileFormat.fileInfo.dataCount       = (int)mainheader.dataCount;
            fileFormat.fileInfo.fileMemo        = GetFileTitle(fileData, fileSize);
            fileFormat.fileInfo.instDescription = GetInstSN(fileData, fileSize);
            fileFormat.fileInfo.modifyFlag      = 0;
            fileFormat.fileInfo.resolution      = mainheader.resolution == 0 ? 4.0 : 32768 / mainheader.resolution;

            fileFormat.fileInfo.specType = FileFormat.SPECTYPE.SPCNIR;  //固定值
            fileFormat.fileInfo.xType    = FileFormat.XAXISTYPE.XWAVEN; //mainheader.xType = 1
            fileFormat.fileInfo.zType    = FileFormat.ZAXISTYPE.XMSEC;  //固定值
            fileFormat.fileInfo.fzinc    = 0.5f;                        //固定值
            fileFormat.fileInfo.fspare   = new float[8];                //固定值

            //读取X轴数据(肯定是均匀的X轴)
            fileFormat.xDataList = new List <double[]>();
            double[] tempx = new double[mainheader.dataCount];
            double   stepx = (mainheader.lastx - mainheader.firstx) / (tempx.Length - 1);

            for (int i = 0; i < tempx.Length; i++)
            {
                tempx[i] = mainheader.firstx + i * stepx;
            }
            fileFormat.xDataList.Add(tempx);

            //获取Y数据以及格式信息
            fileFormat.dataInfoList = new List <FileFormat.DataInfo>();
            fileFormat.yDataList    = new List <double[]>();

            //读取Y轴数据
            double[] ydata = GetYData(fileData, fileSize);
            if (ydata == null || ydata.Length == 0)
            {
                return(false);
            }

            //Y轴数据格式
            FileFormat.DataInfo info = new FileFormat.DataInfo();
            info.dataType  = mainheader.yType == 0x0C ? FileFormat.YAXISTYPE.YABSRB : (mainheader.yType == 0x0F ? FileFormat.YAXISTYPE.YSCRF : FileFormat.YAXISTYPE.YSCSM);
            info.firstX    = mainheader.firstx;
            info.lastX     = mainheader.lastx;
            info.maxYValue = ydata.Max();
            info.minYValue = ydata.Min();

            fileFormat.dataInfoList.Add(info);
            fileFormat.yDataList.Add(ydata);

            InstrumentHeader instHeader = GetInstrumentHeader(fileData, fileSize);

            //读取光谱参数
            fileFormat.acquisitionInfo          = new FileFormat.AcquisitionInfo();
            fileFormat.acquisitionInfo.GAIN     = mainheader.bgGrain;
            fileFormat.acquisitionInfo.HIGHPASS = instHeader.highFilter;
            fileFormat.acquisitionInfo.LOWPASS  = instHeader.lowFilter;
            fileFormat.acquisitionInfo.LWN      = mainheader.lwn;
            fileFormat.acquisitionInfo.SPEED    = instHeader.speed.ToString();
            fileFormat.acquisitionInfo.SCANS    = mainheader.sampleScans;
            fileFormat.acquisitionInfo.SCANSBG  = mainheader.bgScans;
            fileFormat.acquisitionInfo.IRMODE   = FileFormat.enumIRMODE.NearIR;

            return(true);
        }
コード例 #6
0
 private static extern IntPtr SPACreateFile64(ref SPAHeader xDataPara, ref InstrumentHeader instPara, double[] yDatas, byte[] fileTitle, int titleSize, string instSN, ref int outDataSize);