У меня есть набор векторов, содержащих Y / U / V компоненты изображения. Я хочу масштабировать эти векторы на основе множителя целочисленного увеличения. Я могу придумать очевидное решение, которое будет примерно таким:
void zoomBuffer(std::vector<unsigned char>& zoomedBuffer, std::vector<unsigned char>& srcBuffer, const unsigned int width, const unsigned height, const unsigned int zoom)
{
zoomedBuffer.reserve(width * zoom * height * zoom);
for (unsigned int y = 0; y < height; ++y)
{
unsigned int yBufferOffset = y * width;
unsigned int zoomYBufferOffset = y * width * zoom * zoom;
for (unsigned int x = 0; x < width; ++x)
{
unsigned int offset = yBufferOffset + x;
unsigned int zoomOffset = yBufferOffset + x * zoom;
for (unsigned int xCopy = 0; xCopy < zoom; ++xCopy)
{
zoomedBuffer.push_back(srcBuffer[offset]);
}
}
for (unsigned int yCopy = 1; yCopy < zoom; ++yCopy)
{
std::copy_n(zoomedBuffer.begin() + zoomYBufferOffset, zoom * width, std::back_inserter(zoomedBuffer));
}
}
}
тогда называем это так:
zoomBuffer(zoomedY, refBlock.m_yData, refBlock.m_YWidth, refBlock.m_YHeight, 2);
zoomBuffer(zoomedU, refBlock.m_yData, refBlock.m_UWidth, refBlock.m_UHeight, 2);
zoomBuffer(zoomedV, refBlock.m_yData, refBlock.m_VWidth, refBlock.m_VHeight, 2);
Это должно работать, но мне интересно, есть ли более эффективный / более быстрый способ сделать это? Это кажется неуклюжим.
Задача ещё не решена.