view include/marksheet.h @ 0:7bf900d47e9e

start mover2
author pyon@macmini
date Sat, 15 Oct 2011 13:24:27 +0900
parents
children b47bd4618c16
line wrap: on
line source

// Filename   : marksheet.h
// Last Change: 06-Oct-2011.
//
#ifndef __MARKSHEET__
#define __MARKSHEET__


#include "wx/utils.h"
#include "wx/file.h"
#include "wx/string.h"
#include "wx/image.h"

bool IsBlack( int r, int g, int b ) 
{
    if ( r == 0 && g == 0 && b == 0 ) {
        return true;
    }
    return false;
};

wxString GuessHhs( wxString& file ) 
{
    wxString hhs;
    wxImage img( file, wxBITMAP_TYPE_JPEG );
    int sx = 1800;  // start x
    int sy = 315;;  // start y
    int bw = 60;    // block width
    int bh = 50;    // block height
    int area = bw * bh;
    int black = 0;
    int x, y;
    unsigned char r, g, b;

    int max_n;
    float max;
    float bk;
    for ( int c=0; c<10; c++ ) {
        max = 0.0;
        max_n = -1;
        for ( int n=0; n<10; n++ ) {

            for ( x=sx+bw*c; x<sx+bw*(c+1); x++ ) {
                for ( y=sy+bh*n; y<sy+bh*(n+1); y++ ) {
                    r = img.GetRed(   x, y );
                    g = img.GetGreen( x, y );
                    b = img.GetBlue(  x, y );
                    if( IsBlack( (int)r, (int)g, (int)b ) ) black++;
                }
            }

            bk = (float)black / area;
            if ( max < bk ) {
                max = bk;
                max_n = n;
            }
            //wxPuts(wxString::Format(wxT("%d %f"),n,bk));
            black = 0;
        }
        hhs.Append( wxString::Format( wxT("%d"), max_n ) );
    }

    return hhs;
};

bool IsMarksheet( wxString& file )
{
    wxImage img( file, wxBITMAP_TYPE_JPEG );
    int black = 0;
    int x = 2465;
    int h = 3500;
    unsigned char r, g, b;

    for ( int y=0; y<h; y++ ) {
        r = img.GetRed(   x, y );
        g = img.GetGreen( x, y );
        b = img.GetBlue(  x, y );
        if( IsBlack( (int)r, (int)g, (int)b ) ) black++;
    }
    float z = (float)black / h;
    float zmin = 0.095713;
    float zmax = 0.108600;

    wxFile f( file );
    long l = f.Length();
    float lmin = 2072393;
    float lmax = 2346082;

    //wxPuts(wxString::Format(wxT("z = %f, len = %d"),z,len));
    if ( zmin < z && z < zmax
      && lmin < l && l < lmax ) {
        return true;
    }
    return false;
};

#endif // __MARKSHEET__