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)
|
||||
{
|
||||
newImage(ml, RasterImageLayer::RendererType::Multiband, node);
|
||||
newImage(ml, RasterImageLayer::RendererType::Multiband, node, refresh);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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: {
|
||||
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;
|
||||
}
|
||||
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()
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user