#include <iostream>
#include <cstdlib>
#include "C:\libs\CxImage\ximage.h"

using namespace std;

int main(void)
{
    int choice,r,g,b,gray,Height,Width;
    Height=300;
    Width=300;
    CxImage image;
    cout<<"Enter 1-4 for Load File: 1.JPG 2.BMP 3.GIF 4.TIF:";
    cin>>choice;
    
    switch(choice)
    {
        case 1:
        image.Load("test.jpg", CXIMAGE_FORMAT_JPG);
        break;

        case 2:
        image.Load("test.bmp", CXIMAGE_FORMAT_BMP);
        break;

        case 3:
        image.Load("test.gif", CXIMAGE_FORMAT_GIF);
        break;

        case 4:
        image.Load("test.tif", CXIMAGE_FORMAT_TIF);
        break;

        default:
        cout<<"can't open file!";
    }

    BYTE *imgary=image.GetBits();
    for(int i=0;i<Height;i++)
        for(int j=0;j<Width;j++)
        {
            r=imgary[(Width*i+j)*3+2];//將R pixel值取出
            g=imgary[(Width*i+j)*3+1];//將G pixel值取出
            b=imgary[(Width*i+j)*3];//將B pixel值取出
            gray=(int)(r*0.299+g*0.587+b*0.114);//計算出灰階值
            imgary[(Width*i+j)*3+2]=gray;//存回原陣列
            imgary[(Width*i+j)*3+1]=gray;
            imgary[(Width*i+j)*3]=gray;
        }
        
    cout<<"Enter 5-8 for Save File: 5.JPG 6.BMP 7.GIF 8.TIF:";
    cin>>choice;
    
    switch(choice)
    {
        case 5:
        image.Save("test2.jpg", CXIMAGE_FORMAT_JPG);
        break;

        case 6:
        image.Save("test2.bmp", CXIMAGE_FORMAT_BMP);
        break;

        case 7:
        image.Save("test2.gif", CXIMAGE_FORMAT_GIF);
        break;

        case 8:
        image.Save("test2.tif", CXIMAGE_FORMAT_TIF);
        break;

        default:
        cout<<"can't Save File!";
    }
    
    return 0;
}
