Пример #1
0
static
BOOL
_findStrings
(
    HWND    hDlg,
    DWORD   minLength,
    BOOL    ascii,
    BOOL    unicode,
    BOOL    showOffset,
    BOOL    searchBoth
)
{

    PBYTE   fileptr     = g_object;
    PBYTE   fileend     = g_object;
    DWORD   filelen     = 0;
    CHAR    str[MAX_STRING_LEN] = { 0 };
    CHAR    strsfound[30] = { 0 };
    int     strlen      = 0;
    int     offset      = 0;
    int     index       = 0;
    DWORD   steplen     = 0;
    int     stepOffset  = 0;
    char    isUnicode   = 0;
    int     longestStr  = 0;
    BOOL    stop        = FALSE;
    BOOL    err         = FALSE;

    if (minLength < MIN_STRING_LEN)
    {
        minLength = MIN_STRING_LEN;
    }

    ResetEvent(g_event);

    filelen = CFFApi.eaGetObjectSize(hDlg);
    fileend += filelen;
    steplen = filelen / 100;

    if (searchBoth)
    {
        steplen *= 2;
    }


    while (fileptr + offset < fileend && !stop)
    {
        ZeroMemory(str, sizeof(str));
        strlen = string(fileptr, filelen, offset, unicode, str, sizeof(str) - 1, &isUnicode);
            
        if (strlen >= (int)minLength)
        {
            if (index < MAXINT16)
            {
                if (strlen > longestStr)
                {
                    longestStr = strlen;
                }

                if ((ascii && !isUnicode) || (unicode && isUnicode))
                {
                    _insertString(hDlg, str, strlen + 1, showOffset, offset, searchBoth, isUnicode, index);
                    index++;
                }
            }
            else
            {
                Edit_SetText(GetDlgItem(hDlg, IDC_STATUS), "ERROR: Exceeded string display limit (~32K strings). Increase min string length.");
                err = TRUE;
                break;
            }
        }

        offset += (strlen == 0) ? 1 : (isUnicode ? strlen * 2 : strlen);

        if (offset - stepOffset > (int)steplen)
        {
            SendDlgItemMessageA(hDlg, IDC_PROGRESS, PBM_STEPIT, 0, (LPARAM)0);
            stepOffset = offset;
        }
        if (WAIT_OBJECT_0 == WaitForSingleObject(g_event, 0))
        {
            stop = TRUE;
        }
    }
    ListView_SetColumnWidth(GetDlgItem(hDlg, IDC_STRINGLIST), showOffset + searchBoth, longestStr * PIXELS_PER_CHAR);

    if (!stop)
    {
        if (!err)
        {
            ZeroMemory(strsfound, sizeof(strsfound));
            _snprintf_s(strsfound, sizeof(strsfound), sizeof(strsfound), "Found %d strings.", index);
            Edit_SetText(GetDlgItem(hDlg, IDC_STATUS), strsfound);
        }
    }

    return stop || err;
}
Пример #2
0
void StatisticsCASARegion::_getStatsFromCalculator( casa::ImageInterface<casa::Float>* image,
       const casa::Record& region, const std::vector<int>& slice,
       QList<Carta::Lib::StatInfo>& stats, const QString& regionType ){
    //If the region record is empty, there are not stats - just return.
    int fieldCount = region.nfields();
    if ( fieldCount == 0 ){
        return;
    }
    std::shared_ptr<const casa::ImageInterface<casa::Float> > imagePtr( image->cloneII() );

    casa::CoordinateSystem cs = image->coordinates();
    casa::Vector<casa::Int> displayAxes = cs.directionAxesNumbers();
    casa::Quantum<casa::Double> pix0( 0, "pix");
    casa::IPosition shape = image->shape();
    int nAxes = shape.nelements();
    casa::Vector<casa::Quantum<casa::Double> > blcq( nAxes, pix0);
    casa::Vector<casa::Quantum<casa::Double> > trcq( nAxes, pix0);
    for ( int i = 0; i < nAxes; i++ ){
        if ( i == displayAxes[0] || i == displayAxes[1]){
            trcq[i].setValue( shape[i] );
        }
        else {
            blcq[i].setValue( slice[i] );
            trcq[i].setValue( slice[i] );
        }
    }

    casa::WCBox box( blcq, trcq, cs, casa::Vector<casa::Int>());
    casa::ImageRegion* imgBox = new casa::ImageRegion( box );
    std::shared_ptr<casa::SubImage<casa::Float> > boxImage( new casa::SubImage<Float>(*image, *imgBox ) );

    ImageStatsCalculator calc( boxImage, &region, "", true);
    calc.setList(False);
    Record result = calc.calculate();
    const casa::String blcKey( "blc");
    const casa::String trcKey( "trc");
    _insertScalar( result, "npts", Carta::Lib::StatInfo::StatType::FrameCount, stats );
    _insertScalar( result, "sum", Carta::Lib::StatInfo::StatType::Sum, stats );
    _insertScalar( result, "sumsq", Carta::Lib::StatInfo::StatType::SumSq, stats );
    _insertScalar( result, "min", Carta::Lib::StatInfo::StatType::Min, stats );
    _insertScalar( result, "max", Carta::Lib::StatInfo::StatType::Max, stats );
    _insertScalar( result, "mean", Carta::Lib::StatInfo::StatType::Mean, stats );
    _insertScalar( result, "sigma", Carta::Lib::StatInfo::StatType::Sigma, stats );
    _insertScalar( result, "rms", Carta::Lib::StatInfo::StatType::RMS, stats );
    _insertScalar( result, "flux", Carta::Lib::StatInfo::StatType::FluxDensity, stats );
    _insertList( result, blcKey, Carta::Lib::StatInfo::StatType::Blc, stats );
    _insertList( result, trcKey, Carta::Lib::StatInfo::StatType::Trc, stats );
    _insertList( result, "minpos", Carta::Lib::StatInfo::StatType::MinPos, stats );
    _insertList( result, "maxpos", Carta::Lib::StatInfo::StatType::MaxPos, stats );
    _insertString( result, "blcf", Carta::Lib::StatInfo::StatType::Blcf, stats );
    _insertString( result, "trcf", Carta::Lib::StatInfo::StatType::Trcf, stats );
    _insertString( result, "minposf", Carta::Lib::StatInfo::StatType::MinPosf, stats );
    _insertString( result, "maxposf", Carta::Lib::StatInfo::StatType::MaxPosf, stats );

    //Put in an identifier.
    if ( result.isDefined( blcKey ) && result.isDefined( trcKey ) ){
        casa::Vector<int> blcArray = result.asArrayInt( blcKey );
        QString blcVal = _vectorToString( blcArray );
        casa::Vector<int> trcArray = result.asArrayInt( trcKey );
        QString trcVal = _vectorToString( trcArray );
        QString idVal = regionType + ":" + blcVal;
        if ( blcVal != trcVal ){
            idVal = idVal + " x " + trcVal;
        }
        Carta::Lib::StatInfo info( Carta::Lib::StatInfo::StatType::Name );
        info.setValue( idVal );
        info.setImageStat( false );
        stats.append( info );
    }
}