fix:
1、采集时,创建RasterImageLayer时,dataprovider延迟初始化; 2、采集时,不通过渲染器渲染;
This commit is contained in:
@ -2667,7 +2667,7 @@ void HPPA::addLayer(const QString& baseName, const QString& filePath,bool refres
|
|||||||
|
|
||||||
if (isAddImage)
|
if (isAddImage)
|
||||||
{
|
{
|
||||||
newImage(ml, RasterImageLayer::RendererType::Multiband, node);
|
newImage(ml, RasterImageLayer::RendererType::Multiband, node, refresh);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -8,32 +8,46 @@
|
|||||||
RasterImageLayer::RasterImageLayer(RasterLayer* layer, RendererType type)
|
RasterImageLayer::RasterImageLayer(RasterLayer* layer, RendererType type)
|
||||||
: m_layer(layer)
|
: m_layer(layer)
|
||||||
, m_rendererType(type)
|
, m_rendererType(type)
|
||||||
|
, m_rendererInitialized(false)
|
||||||
{
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void RasterImageLayer::ensureRenderer()
|
||||||
|
{
|
||||||
|
if (m_rendererInitialized) return;
|
||||||
if (!m_layer) return;
|
if (!m_layer) return;
|
||||||
|
|
||||||
RasterDataProvider* provider = nullptr;
|
RasterDataProvider* provider = nullptr;
|
||||||
if (m_layer->dataProvider()) {
|
if (m_layer->dataProvider())
|
||||||
|
{
|
||||||
provider = m_layer->dataProvider();
|
provider = m_layer->dataProvider();
|
||||||
} else if (m_layer->openDataProvider()) {
|
}
|
||||||
|
else if (m_layer->openDataProvider())
|
||||||
|
{
|
||||||
provider = m_layer->dataProvider();
|
provider = m_layer->dataProvider();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!provider) return;
|
if (!provider) return;
|
||||||
|
|
||||||
switch (type) {
|
switch (m_rendererType)
|
||||||
case RendererType::Multiband: {
|
{
|
||||||
|
case RendererType::Multiband:
|
||||||
|
{
|
||||||
auto* multiRenderer = new MultibandRasterRenderer(provider);
|
auto* multiRenderer = new MultibandRasterRenderer(provider);
|
||||||
m_renderer.reset(multiRenderer);
|
m_renderer.reset(multiRenderer);
|
||||||
multiRenderer->setParams(m_multibandParams);
|
multiRenderer->setParams(m_multibandParams);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case RendererType::Singleband: {
|
case RendererType::Singleband:
|
||||||
|
{
|
||||||
auto* singleRenderer = new SinglebandRasterRenderer(provider);
|
auto* singleRenderer = new SinglebandRasterRenderer(provider);
|
||||||
m_renderer.reset(singleRenderer);
|
m_renderer.reset(singleRenderer);
|
||||||
singleRenderer->setParams(m_singlebandParams);
|
singleRenderer->setParams(m_singlebandParams);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_rendererInitialized = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
RasterImageLayer::~RasterImageLayer()
|
RasterImageLayer::~RasterImageLayer()
|
||||||
@ -43,6 +57,7 @@ RasterImageLayer::~RasterImageLayer()
|
|||||||
|
|
||||||
QImage RasterImageLayer::render()
|
QImage RasterImageLayer::render()
|
||||||
{
|
{
|
||||||
|
ensureRenderer();
|
||||||
if (!m_renderer) return QImage();
|
if (!m_renderer) return QImage();
|
||||||
return m_renderer->render();
|
return m_renderer->render();
|
||||||
}
|
}
|
||||||
@ -50,7 +65,7 @@ QImage RasterImageLayer::render()
|
|||||||
void RasterImageLayer::setMultibandParams(const MultibandRenderParams& params)
|
void RasterImageLayer::setMultibandParams(const MultibandRenderParams& params)
|
||||||
{
|
{
|
||||||
m_multibandParams = params;
|
m_multibandParams = params;
|
||||||
if (m_rendererType == RendererType::Multiband) {
|
if (m_rendererInitialized && m_rendererType == RendererType::Multiband) {
|
||||||
auto* r = static_cast<MultibandRasterRenderer*>(m_renderer.get());
|
auto* r = static_cast<MultibandRasterRenderer*>(m_renderer.get());
|
||||||
r->setParams(params);
|
r->setParams(params);
|
||||||
}
|
}
|
||||||
@ -59,7 +74,7 @@ void RasterImageLayer::setMultibandParams(const MultibandRenderParams& params)
|
|||||||
void RasterImageLayer::setSinglebandParams(const SinglebandRenderParams& params)
|
void RasterImageLayer::setSinglebandParams(const SinglebandRenderParams& params)
|
||||||
{
|
{
|
||||||
m_singlebandParams = params;
|
m_singlebandParams = params;
|
||||||
if (m_rendererType == RendererType::Singleband) {
|
if (m_rendererInitialized && m_rendererType == RendererType::Singleband) {
|
||||||
auto* r = static_cast<SinglebandRasterRenderer*>(m_renderer.get());
|
auto* r = static_cast<SinglebandRasterRenderer*>(m_renderer.get());
|
||||||
r->setParams(params);
|
r->setParams(params);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -22,6 +22,7 @@ public:
|
|||||||
RasterImageLayer(RasterLayer* layer, RendererType type);
|
RasterImageLayer(RasterLayer* layer, RendererType type);
|
||||||
~RasterImageLayer();
|
~RasterImageLayer();
|
||||||
|
|
||||||
|
void ensureRenderer();
|
||||||
QImage render();
|
QImage render();
|
||||||
|
|
||||||
RasterLayer* layer() const { return m_layer; }
|
RasterLayer* layer() const { return m_layer; }
|
||||||
@ -41,4 +42,5 @@ private:
|
|||||||
std::unique_ptr<RasterRendererBase> m_renderer;
|
std::unique_ptr<RasterRendererBase> m_renderer;
|
||||||
MultibandRenderParams m_multibandParams;
|
MultibandRenderParams m_multibandParams;
|
||||||
SinglebandRenderParams m_singlebandParams;
|
SinglebandRenderParams m_singlebandParams;
|
||||||
|
bool m_rendererInitialized = false;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user