view src/testtune.cpp @ 21:c540dc3eabe5 v2.2dev

add listctrl-dir
author pyon@macmini
date Wed, 26 Oct 2011 20:40:53 +0900
parents 7bf900d47e9e
children
line wrap: on
line source

// Filename   : testtune.cpp
// Last Change: 13-Oct-2011.
//

#include "wx/utils.h"
#include "wx/file.h"
#include "wx/string.h"
#include "wx/app.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,l));
    if ( zmin < z && z < zmax
      && lmin < l && l < lmax ) {
        return true;
    }
    return false;
}

int main( int argc, char **argv ) 
{
    wxInitAllImageHandlers();
    wxString file = wxT("img999.jpg");

    if ( IsMarksheet( file ) ) wxPuts(file+wxT(" is perhaps marksheet !"));
    wxString hhs = GuessHhs( file );
    wxPuts(hhs);

}