#include <highgui.h>
#include <stdio.h>
#include <iostream>
#include <math.h>
#include <conio.h>
#include "Cpl64.h"
#include <fstream>
#include <iomanip>
#include"memory.h"
#define fileNum 400
using namespace std;
HANDLE ghEvent;
int x=0;
int Thickness;
int Shift;
int pixel = 4096;
int height = 400;
unsigned char *m_pImgBuff_All[fileNum];
void __stdcall MyCallBack(int Handle, int EventType, void *pBuffer, int Size)
{
//cout<<"b mode "<<x<<endl;
if(x<fileNum)
{
unsigned char *temp1=(unsigned char *)pBuffer;
cout<<(int*)m_pImgBuff_All[x]<<","<<(int*)temp1<<endl;
memcpy(m_pImgBuff_All[x], temp1, pixel*height*4); //將buffer內的data另外存到m_pImgBuff_All[x]
}
x++;
}
int main()
{
int Handle1,rtn;
int num=4096;
int cali_num=2048;
void *pBuffer;
float *cali2re = new float [cali_num];
float *avgR = new float [num];
unsigned char *tempArray[fileNum];
for(int j=0;j<fileNum;j++)
{
unsigned char *tempDeliver=new unsigned char [pixel*height*4];
tempArray[j]=tempDeliver;
cout<<j<<endl;
}
for(int j=0;j<fileNum;j++)
{
m_pImgBuff_All[j]=tempArray[j];
}
ifstream loadCali("LamdaCali_2048points.txt"); //這是calibration好的檔案
for(int w=0;w<cali_num;w++)
{
loadCali>>cali2re[w];
//cali2re[w]=cali2re[w]-1728;
}
loadCali.clear();
loadCali.close();
Handle1 = Cpl64_OpenDevice( 0, 0); //check your cardid and channel on CamCreator
//cout<<"Handle1 = "<<Handle1<<endl;
Cpl64_LoadCamFile(Handle1,"E:\\sd oct\\new800\\camfile\\Basler sprint spL4096-140km3D.ini");
//cout<<"here1"<<endl;
rtn=Cpl64_SetCallback(Handle1, 0, MyCallBack);
//cout<<"here2"<<endl;
ghEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
rtn=Cpl64_StartCapture(Handle1, fileNum);
cout<<"Press Enter to Save Files"<<endl;
getch();
rtn = Cpl64_CloseDevice(Handle1);
//----------------------------------------------------------以下存檔-----------------------------------------------------------------------------
char fileNamePosition[80];
for(int j=0;j<fileNum;j++)
{
cout<<"存檔"<<j<<"中請稍候"<<endl;
unsigned char *temp2=(unsigned char *) tempArray[j]; //存下來的data拿出來
//---------------------------------平均頻譜--------------------------------------------------
float *in1 = new float [num];
float *out1 = new float [num];
for(int line=0;line<height;line++)
{
//cout<<"處理中:"<<line<<"/2000"<<endl;
for(int j=0;j<num;j++)
{
in1[j]=(int(temp2[2*j+2*line*num]))/16+16*int(temp2[2*j+1+2*line*num]);
}
for(int i=0;i<num;i++)
{
if(line==0)
out1[i]=in1[i];
else
out1[i]=out1[i]+in1[i];
}
}
for(int i=0;i<num;i++)
{
avgR[i]=out1[i]/height;
}
delete [] in1;
delete [] out1;
//----------------------------------------------------------------------------------------
sprintf(fileNamePosition,"E:\\sd oct\\new800\\3d\\test%d.bin",j);
ofstream savespec(fileNamePosition,ios::binary);
float *in2 = new float [num];
float *out2 = new float [num];
for(int line=0;line<height;line++)
{
for(int j=0;j<num;j++)
{
in2[j]=int(temp2[2*j+2*line*num])/16+16*int(temp2[2*j+1+2*line*num])-avgR[j];
}
for(int n=0;n<cali_num;n++)
{
if((cali2re[n]-int(cali2re[n]))==0)
out2[n]=in2[int(cali2re[n])];
else
out2[n]=in2[int(cali2re[n])]+(cali2re[n]-int(cali2re[n]))*(in2[int(cali2re[n])+1]-in2[int(cali2re[n])]);//(int(cali2re[n])+1-cali2re[n])*(pSignal2[int(cali2re[n])+1].re()-pSignal2[int(cali2re[n])].re()));
}
savespec.write((char*)ou