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; }
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; }
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; }
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; }