gpt4 book ai didi

c++ - 如何优雅地从 C++ vector 中提取二维矩形区域

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:24:30 25 4
gpt4 key购买 nike

这个问题很简单。(我很疑惑为什么搜索没有找到任何东西)

我有一个矩形“图片”,用于存储它的像素颜色线在 std::vector 中的行之后

我想从该图片中复制一个矩形区域。

我如何用 C++ 优雅地编写代码?

我的第一次尝试:

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

甚至不编译.....

添加:澄清:我知道如何“手工”执行此操作。这本身不是问题。但我会喜欢一些 c++ STL 迭代器魔术,它可以做同样的事情,但速度更快,而且...更 c++ 时尚。

补充:我为算法提供了 pictureDataVector、图片的宽度和高度以及表示我要从图片中复制的区域的矩形。返回值应该是一个包含矩形内容的新 vector 。

将其视为打开您最喜欢的图像编辑器,然后从中复制一个矩形区域。图片存储为像素颜色的长一维数组( vector )。

最佳答案

for (int r = startRow; r < endRow; r++)
for (int c = startCol; c < endCol; c++)
rect[r-startRow][c-startCol] = source[r*rowWidth+c];

关于c++ - 如何优雅地从 C++ vector 中提取二维矩形区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/783018/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com