testWidget::testWidget(QWidget *parent):QWidget(parent)
{
    setFixedSize(600, 400);

    QPushButton *btnCreateFlist = new QPushButton(tr("createFlist"),this);
    btnCreateFlist->setGeometry(100, 100, 200, 150);
    btnCreateFlist->setFont(QFont("Times", 18, QFont::Bold));

    showString = new QLabel;
    showString->setText(tr("Hello QT!"));
    showString->setGeometry(200,100,100,20);
    showString->setFont(QFont("Times", 12, QFont::Bold));

    rCaliImgLOG = new QLabel;
    rCaliImgLOG->setText(tr("CaliBration Image Read"));
    rCaliImgLOG->setGeometry(200,160,100,60);
    rCaliImgLOG->setFont(QFont("Times",12,QFont::Thin));


    QSlider *slider = new QSlider(Qt::Horizontal);
    slider->setRange(0, 99);
    slider->setValue(0);


    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(showString);
    layout->addWidget(rCaliImgLOG);
    layout->addWidget(slider);
    layout->addWidget(btnCreateFlist);

    setLayout(layout);

    QObject::connect(btnCreateFlist, SIGNAL(clicked()) , this, SLOT(createFilst()));


}

void testWidget:: createFilst()
{
FILE *img_txt;
FILE *rFolderList, *rFileList, *rImg, *wImg;
char sys_cmd[200], folderName[200], fileName[200], fileAddr[500];
char new_fileAddr[200];
unsigned char header[1078]={0}, times=0;//, img_ori2[RES_1016_IMAGE_SIZE]={0}
unsigned long width, height;

//read Calibration Image

    testWidget::readCaliImg("Calibration.y");

    cout<<testWidget::caliImgName<<endl;

    sprintf(sys_cmd,"dir /A:D /b t* >  folder_list.txt");
    system(sys_cmd);

    sprintf(sys_cmd,"md newProc");
    system(sys_cmd);

    rFolderList = fopen("folder_list.txt", "rt");

    while(EOF!=fscanf(rFolderList,"%s",folderName))
    {
        sprintf(sys_cmd,"md newProc\\%s",folderName);
        system(sys_cmd);

        sprintf(sys_cmd,"dir /b %s\\*.bmp > file_list.txt", folderName);
        system(sys_cmd);

        rFileList = fopen("file_list.txt","rt");

        while(EOF!=fscanf(rFileList,"%s",fileName))
        {
//            for(int i=0; i<RES_1016_IMAGE_SIZE; i++)
//            {
//                img_ori[i] = 0;
//                img_dst[i] = 0;
//            }
            img_txt=fopen("img.txt","wt");

            sprintf(fileAddr,"%s\\%s",folderName,fileName);
            sprintf(new_fileAddr,"newProc\\%s\\%s",folderName,fileName);
            rImg = fopen(fileAddr,"rb");

            if(rImg == NULL)
            {
//                showString->setText(tr("Read File ERROR!!!"));
                showString->setText(tr(fileAddr));
            }
            showString->setText(tr(fileAddr));
            wImg = fopen(new_fileAddr,"wb");

            fread(header,sizeof(unsigned char),1078,rImg);
            fwrite(header,sizeof(unsigned char),1078,wImg);

            fseek(rImg,18,SEEK_SET);
            fread(&width,sizeof(unsigned long),1,rImg);
            fread(&height,sizeof(unsigned long),1,rImg);
            fseek(rImg,1078,SEEK_SET);

//            if(times==0)
//            {
//                img_ori=(unsigned char*)malloc(width*height*sizeof(unsigned char));
//                img_dst=(unsigned char*)malloc(width*height*sizeof(unsigned char));
//                times++;
//            }



            fread(img_ori,sizeof(unsigned char),width*height, rImg);

            testWidget::imgProc();
//            inverseImage((int)width, (int)height, img_ori, img_dst);
//            applyISP((int)width, (int)height, img_ori, img_dst,  caliImg);//
            for(int i=0; i<(int)(width*height); i++)
            {
//                img_dst[i]=img_ori[i];
                fprintf(img_txt, "%03d\t", img_dst[i]);
            }

            fwrite(img_dst,sizeof(unsigned char),width*height, wImg);

            fclose(rImg);
            fclose(wImg);
            fclose(img_txt);
        }
//        showString->setText(tr(fileName));
    }

    fclose(rFolderList);
    fclose(rFileList);


//    free(img_ori);
//    free(img_dst);

}

void testWidget::readCaliImg(string caliImgName)//char *caliImgName
{
FILE *rCaliImg;

    rCaliImg=fopen(caliImgName.c_str(),"rb");   //string to char[] -> caliImgName.c_str()
//    rCaliImg=fopen(caliImgName,"rb");

    if(rCaliImg == NULL)
        rCaliImgLOG->setText(rCaliImgLOG->text() + " Error!");
    else
        rCaliImgLOG->setText(rCaliImgLOG->text() + " Success!");

    fread(caliImg,sizeof(unsigned char),RES_1016_IMAGE_SIZE,rCaliImg);

    fclose(rCaliImg);
}


void testWidget::imgProc()//
{

    showString->setText(tr("Doing imgProc!!!!!!!!!!!!!!!!"));

	for(int i=0; i<(int)(width*height); i++)
    {
        img_dst[i]=(unsigned char)255;

    }

}