Files
HPPA/HPPA/RasterImageLayer.cpp
tangchao0503 43acd5ba01 fix:
1、采集时,创建RasterImageLayer时,dataprovider延迟初始化;
2、采集时,不通过渲染器渲染;
2026-05-27 17:42:14 +08:00

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