/*
 * =====================================================================================
 *
 *       Filename:  build-table.cpp
 *
 *    Description:  
 *
 *        Version:  1.0
 *        Created:  03/04/2011 22:11:22
 *       Revision:  none
 *       Compiler:  gcc
 *
 *         Author:  John Ryland (jryland), jryland@xiaofrog.com
 *        Company:  InvertedLogic
 *
 * =====================================================================================
 */
#include <QApplication>
#include <QPixmap>
#include <QImage>
#include <stdio.h>


void output(FILE *f, unsigned char *image)
{
    for (int j = 0; j < 32; j++) {
        for (int i = 0; i < 32; i++) {
            unsigned int val = 0;
            for (int x = 0; x < 16; x++)
                for (int y = 0; y < 16; y++)
                    val += image[512*(j*16+y)+i*16+x];
            unsigned int b = val / 256;
            fwrite(&b, 4, 1, f);
        }
    }
    for (int i = 0; i < 512; i++) {
        unsigned int val = 0;
        for (int j = 0; j < 512; j++) {
            val += image[512*j+i];
        }
        unsigned int b = val / 512;
        fwrite(&b, 4, 1, f);
    }
    for (int i = 0; i < 512; i++) {
        unsigned int val = 0;
        for (int j = 0; j < 512; j++) {
            val += image[512*i+j];
        }
        unsigned int b = val / 512;
        fwrite(&b, 4, 1, f);
    }
    for (int j = 0; j < 1024; j++) {
        unsigned int val = 0;
        unsigned int count = 0;
        for (int i = 0; i < 512; i++) {
            int x = i;
            int y = j - i;
            if (x >=0 && x < 512 && y >=0 && y < 512) {
                val += image[512*y+x];
                count++;
            }
        }
        unsigned int b = val;
        if (count)
            b /= count;
        fwrite(&b, 4, 1, f);
    }
    for (int j = -512; j < 512; j++) {
        unsigned int val = 0;
        unsigned int count = 0;
        for (int i = 0; i < 512; i++) {
            int x = i;
            int y = j + i;
            if (x >=0 && x < 512 && y >=0 && y < 512) {
                val += image[512*y+x];
                count++;
            }
        }
        unsigned int b = val;
        if (count)
            b /= count;
        fwrite(&b, 4, 1, f);
    }
}


int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

printf("starting\n");

    const int size = 512*512;
    unsigned char *image = (unsigned char *)malloc(size);
printf("alloced mem\n");
    memset(image, 0, size);
printf("zeroed mem\n");

    QImage pix( QString("test01.png") );
    int w = pix.width();
    int h = pix.height();

    for (int y = 0; y < h; y++) {
        for (int x = 0; x < w; x++) {
            image[y*w+x] = pix.pixel(x,y);
        }
    }

    FILE *f = fopen("blah.out", "w");
printf("opened output\n");
    output(f, image);
printf("written output\n");
    fclose(f);
printf("closed output\n");

    QImage outputImage(512, 512, QImage::Format_RGB888);
    for (int y = 0; y < h; y++) {
        for (int x = 0; x < w; x++) {
            unsigned char p = image[y*w+x];
            unsigned int p2 = p;
            p2 = (p2 << 16) | (p2 << 8) | p2;
            outputImage.setPixel(x, y, p2);
        }
    }
    outputImage.save("output.png");

    return 0;//app.exec();
}



