Le problème est assez basique. (Je suis perplexe pourquoi la recherche n'a rien trouvé)Comment extraire avec élégance une région rectangulaire 2D à partir d'un vecteur C++
Je rectangulaire « image » qui stocke sa ligne de couleur du pixel après la ligne dans un std :: vecteur
Je veux copier rectangulaire région hors de cette image.
Comment est-ce que je pourrais le coder avec élégance en C++?
Mon premier essai:
template <class T> std::vector<T> copyRectFromVector(const std::vector<T>& vec, std::size_t startx, std::size_t starty, std::size_t endx, std::size_t endy, std::size_t fieldWidth, std::size_t fieldHeight)
{
using namespace std;
vector<T> ret((endx-startx)*(endy-starty)+10); // 10: chickenfactor
// checks if the given parameters make sense:
if (vec.size() < fieldWidth*endy)
{
cerr << "Error: CopyRectFromVector: vector to small to contain rectangular region!" << std::endl;
return ret;
}
// do the copying line by line:
vector<T>::const_iterator vecIt = vec.begin();
vector<T>::forward_iterator retIt = ret.end();
vecIt += startx + (starty*fieldWidth);
for(int i=starty; i < endy; ++i)
{
std::copy(vecIt, vecIt + endx - startx, retIt);
}
return ret;
}
ne compile même pas .....
supp: Précision: Je sais comment faire "à la main". Ce n'est pas un problème en tant que tel. Mais j'aimerais beaucoup la magie de l'itérateur C++ stl qui fait la même chose, mais plus vite et ... plus C++ stylé.
Addition: Je donne à l'algorithme le pictureDataVector, la largeur et la hauteur de l'image et un rectangle indiquant la région que je veux copier hors de l'image. La valeur de retour doit être un nouveau vecteur avec le contenu du rectangle. Pensez-y comme l'ouverture de votre éditeur d'image favori, et copiez une région rectangulaire à partir de cela. L'image est stockée sous la forme d'un long tableau 1D (vecteur) de pixels.
Neil vous êtes un épargnant de vie :) écrire un commentaire afin que je puisse vous +1 à un :) – AndreasT
Précision: Neil juste sauvé mon (merdique) exemple de code :) Toujours pas sûr de ce que je fait de mal ... mais que diable ... – AndreasT
Vous avez essayé d'utiliser HTML - ne faites pas ça. Au lieu de cela, sélectionnez tout le code avec la souris et tapez Ctrl-K. –