82 lines
2.1 KiB
C++
82 lines
2.1 KiB
C++
#include "RasterImageLayer.h"
|
|
#include "RasterLayer.h"
|
|
#include "RasterDataProvider.h"
|
|
#include "RasterRendererBase.h"
|
|
#include "MultibandRasterRenderer.h"
|
|
#include "SinglebandRasterRenderer.h"
|
|
|
|
RasterImageLayer::RasterImageLayer(RasterLayer* layer, RendererType type)
|
|
: m_layer(layer)
|
|
, m_rendererType(type)
|
|
, m_rendererInitialized(false)
|
|
{
|
|
}
|
|
|
|
void RasterImageLayer::ensureRenderer()
|
|
{
|
|
if (m_rendererInitialized) return;
|
|
if (!m_layer) return;
|
|
|
|
RasterDataProvider* provider = nullptr;
|
|
if (m_layer->dataProvider())
|
|
{
|
|
provider = m_layer->dataProvider();
|
|
}
|
|
else if (m_layer->openDataProvider())
|
|
{
|
|
provider = m_layer->dataProvider();
|
|
}
|
|
|
|
if (!provider) return;
|
|
|
|
switch (m_rendererType)
|
|
{
|
|
case RendererType::Multiband:
|
|
{
|
|
auto* multiRenderer = new MultibandRasterRenderer(provider);
|
|
m_renderer.reset(multiRenderer);
|
|
multiRenderer->setParams(m_multibandParams);
|
|
break;
|
|
}
|
|
case RendererType::Singleband:
|
|
{
|
|
auto* singleRenderer = new SinglebandRasterRenderer(provider);
|
|
m_renderer.reset(singleRenderer);
|
|
singleRenderer->setParams(m_singlebandParams);
|
|
break;
|
|
}
|
|
}
|
|
|
|
m_rendererInitialized = true;
|
|
}
|
|
|
|
RasterImageLayer::~RasterImageLayer()
|
|
{
|
|
m_renderer.reset();
|
|
}
|
|
|
|
QImage RasterImageLayer::render()
|
|
{
|
|
ensureRenderer();
|
|
if (!m_renderer) return QImage();
|
|
return m_renderer->render();
|
|
}
|
|
|
|
void RasterImageLayer::setMultibandParams(const MultibandRenderParams& params)
|
|
{
|
|
m_multibandParams = params;
|
|
if (m_rendererInitialized && m_rendererType == RendererType::Multiband) {
|
|
auto* r = static_cast<MultibandRasterRenderer*>(m_renderer.get());
|
|
r->setParams(params);
|
|
}
|
|
}
|
|
|
|
void RasterImageLayer::setSinglebandParams(const SinglebandRenderParams& params)
|
|
{
|
|
m_singlebandParams = params;
|
|
if (m_rendererInitialized && m_rendererType == RendererType::Singleband) {
|
|
auto* r = static_cast<SinglebandRasterRenderer*>(m_renderer.get());
|
|
r->setParams(params);
|
|
}
|
|
}
|