Пример #1
0
void
dumpqueue(const List<Proxy<NodeType> > &q)
{
	ListIterator<Proxy<NodeType> > qit(q);
	for (int i=1; !qit.done(); i++, qit++)
	{
		cout << "fvalue[" << i << "] = " << qit()->getFvalue() << endl;
		cout << "gvalue[" << i << "] = " << qit()->getGvalue() << endl;
		cout << "hvalue[" << i << "] = " << qit()->getHvalue() << endl;
	}
	return;
}
Пример #2
0
QImage * SeamCarver::extendWidth(int w_extent,bool compression,bool afficheLignes)
{
    QPolygon *ligneBest;// = listLignesMostSuitable.first();
    QRgb color1,color2;
    int y_ligneBest;
    QPoint pp;
    int extendedSize = 0;//2*w_extent;
    if (!afficheLignes)
        extendedSize = (compression) ? -w_extent : w_extent;
    QImage *dataRet = new QImage(imgOrigine->width(),imgOrigine->height()+extendedSize,imgOrigine->format());
    ImageResizer *resizer = new ImageResizer;
    int delta_y,tmp_lect;
    QList<int> list_y_val;
    int counterExtractLignes = w_extent;
    QListIterator<QPolygon *> qit(listLignesMostSuitable);

    for (int x=0; x < imgOrigine->width() ; x++)
    {
        qit.toFront();
        list_y_val.clear();
        counterExtractLignes = w_extent;
        while ((qit.hasNext()) && (counterExtractLignes >0))
        {
            ligneBest=qit.next();
            list_y_val << (ligneBest->point(x)).y();
            counterExtractLignes--;
        }
        qSort(list_y_val);
        list_y_val << imgOrigine->height() + 1000;
        y_ligneBest = list_y_val.takeFirst();

        //        pp=ligneBest->takeFirst();
        //y_ligneBest=pp.y();
        delta_y=0;
        for (int y=0; y < imgOrigine->height() ; y++) {
            color1=imgOrigine->pixel(x,y);
            if ((afficheLignes) || (y != y_ligneBest))
            {
                int w_newPosition = y+delta_y;
                if (w_newPosition < dataRet->height())
                    dataRet->setPixel(x,w_newPosition,color1);
            } else
            {
                if (compression)
                {
                    delta_y -= 1;
                } else
                {
                    dataRet->setPixel(x,y_ligneBest+delta_y,color1);
                    color2=imgOrigine->pixel(x,y+1);
                    resizer->interpol(dataRet,x,y_ligneBest+delta_y+1,1,color1,color2,false);
                    delta_y += 1;
                }
                y_ligneBest = list_y_val.takeFirst();
            }
        }
    }
    return dataRet;
}
Пример #3
0
QImage * SeamCarver::extendWidth(int w_extent){

    QPolygon *ligneBest;// = listLignesMostSuitable.first();
    QRgb color1,color2;
    QRgb ligneColor = qRgb(255,255,255);
    int y_ligneBest;
    QPoint pp;
    QImage *dataRet = new QImage(imgOrigine->width(),imgOrigine->height()+2+NB_LIGNES_SEAM_CARVING,imgOrigine->format());
    ImageResizer *resizer = new ImageResizer;
    int delta_y,tmp_lect;
    QList<int> list_y_val;
    QListIterator<QPolygon *> qit(listLignesMostSuitable);

    for (int x=0; x < imgOrigine->width() ; x++)
    {
        qit.toFront();
        list_y_val.clear();
        while (qit.hasNext())
        {
            ligneBest=qit.next();
            list_y_val << (ligneBest->takeFirst()).y();
        }
        qSort(list_y_val);
        list_y_val << imgOrigine->height() + 1000;
        y_ligneBest = list_y_val.takeFirst();

        //        pp=ligneBest->takeFirst();
        //y_ligneBest=pp.y();
        delta_y=0;
        for (int y=0; y < imgOrigine->height() ; y++) {
            color1=imgOrigine->pixel(x,y);
            if (y != y_ligneBest)
            {
                dataRet->setPixel(x,y+delta_y,color1);
            } else
            {
                dataRet->setPixel(x,y_ligneBest+delta_y,ligneColor);
                dataRet->setPixel(x,y_ligneBest+delta_y+2+NB_LIGNES_SEAM_CARVING,ligneColor);
                color2=imgOrigine->pixel(x,y+1);
                resizer->interpol(dataRet,x,y_ligneBest+1+delta_y,NB_LIGNES_SEAM_CARVING+1,color1,color2,false);
                delta_y += NB_LIGNES_SEAM_CARVING+2;
            }
        }
    }
    return dataRet;
}
Пример #4
0
bool SeamCarver::iteration()
{
    QList<QPolygon *> listLignes;
    QPoint item;
    int strengthValue;
    QList<int> listStrengthValue;
    QList<int> listOrderedStrengthValue;
    QPolygon *polyg;
    bool route_bloquee;

    for(int h=0;h<imgOrigine->height();h++){
        route_bloquee=false;
        if (b_Pos_interdit[h][0] == false)
        {
            polyg = new QPolygon();
            item = QPoint(0,h);
            *polyg << item;
            strengthValue = getPointEnergy(h,0);
            for (int w=1; w<(imgOrigine->width()-1); w++) {
                item = leastRouteNextPointAt(item,strengthValue);
                if (item.y() < 0) //Cas 3 routes bloquées
                {
                    w=imgOrigine->width();
                    route_bloquee=true;

                } else
                    *polyg << item;
            }
            if (route_bloquee==false)
            {
                *polyg << QPoint(imgOrigine->width()-1,item.y());
                listStrengthValue << strengthValue;
                listOrderedStrengthValue << strengthValue;
                listLignes <<polyg;
            } else
                delete polyg;
        }
    }
    if (listOrderedStrengthValue.isEmpty())
        return false;
    qSort(listOrderedStrengthValue);
    int strLeast;
    int index=1;
    polyg = NULL;
    strLeast = listOrderedStrengthValue.takeFirst();
    index = listStrengthValue.indexOf(strLeast);
    listStrengthValue.takeAt(index);
    polyg = listLignes.takeAt(index);
    listLignesMostSuitable << polyg;
    if ((polyg != NULL) && (!polyg->isEmpty()))
    {
        QVectorIterator<QPoint> qit(*polyg);
        while (qit.hasNext())
        {
            item=qit.next();
            b_Pos_interdit[item.y()][item.x()]= true;
        }
    }
    qDeleteAll(listLignes);
    return true;
}