1、采集时,创建RasterImageLayer时,dataprovider延迟初始化;
2、采集时,不通过渲染器渲染;
This commit is contained in:
tangchao0503
2026-05-27 17:40:41 +08:00
parent 5dc589aee0
commit 43acd5ba01
3 changed files with 35 additions and 18 deletions

View File

@ -2667,7 +2667,7 @@ void HPPA::addLayer(const QString& baseName, const QString& filePath,bool refres
if (isAddImage)
{
newImage(ml, RasterImageLayer::RendererType::Multiband, node);
newImage(ml, RasterImageLayer::RendererType::Multiband, node, refresh);
}
}

View File

@ -8,32 +8,46 @@
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()) {
if (m_layer->dataProvider())
{
provider = m_layer->dataProvider();
} else if (m_layer->openDataProvider()) {
}
else if (m_layer->openDataProvider())
{
provider = m_layer->dataProvider();
}
if (!provider) return;
switch (type) {
case RendererType::Multiband: {
switch (m_rendererType)
{
case RendererType::Multiband:
{
auto* multiRenderer = new MultibandRasterRenderer(provider);
m_renderer.reset(multiRenderer);
multiRenderer->setParams(m_multibandParams);
break;
}
case RendererType::Singleband: {
case RendererType::Singleband:
{
auto* singleRenderer = new SinglebandRasterRenderer(provider);
m_renderer.reset(singleRenderer);
singleRenderer->setParams(m_singlebandParams);
break;
}
}
m_rendererInitialized = true;
}
RasterImageLayer::~RasterImageLayer()
@ -43,6 +57,7 @@ RasterImageLayer::~RasterImageLayer()
QImage RasterImageLayer::render()
{
ensureRenderer();
if (!m_renderer) return QImage();
return m_renderer->render();
}
@ -50,7 +65,7 @@ QImage RasterImageLayer::render()
void RasterImageLayer::setMultibandParams(const MultibandRenderParams& params)
{
m_multibandParams = params;
if (m_rendererType == RendererType::Multiband) {
if (m_rendererInitialized && m_rendererType == RendererType::Multiband) {
auto* r = static_cast<MultibandRasterRenderer*>(m_renderer.get());
r->setParams(params);
}
@ -59,7 +74,7 @@ void RasterImageLayer::setMultibandParams(const MultibandRenderParams& params)
void RasterImageLayer::setSinglebandParams(const SinglebandRenderParams& params)
{
m_singlebandParams = params;
if (m_rendererType == RendererType::Singleband) {
if (m_rendererInitialized && m_rendererType == RendererType::Singleband) {
auto* r = static_cast<SinglebandRasterRenderer*>(m_renderer.get());
r->setParams(params);
}

View File

@ -22,6 +22,7 @@ public:
RasterImageLayer(RasterLayer* layer, RendererType type);
~RasterImageLayer();
void ensureRenderer();
QImage render();
RasterLayer* layer() const { return m_layer; }
@ -41,4 +42,5 @@ private:
std::unique_ptr<RasterRendererBase> m_renderer;
MultibandRenderParams m_multibandParams;
SinglebandRenderParams m_singlebandParams;
bool m_rendererInitialized = false;
};