fix
兼容2种帧数显示逻辑:(1)采集时的实时帧数(2)打开影像时的帧数;
This commit is contained in:
@ -1064,16 +1064,20 @@ void HPPA::removeLayerByNode(LayerTreeNode* node)
|
||||
const int tabIndex = m_imageViewerTabWidget->indexOf(widget);
|
||||
if (tabIndex >= 0)
|
||||
{
|
||||
if (m_recordFrameCounter)
|
||||
{
|
||||
m_recordFrameCounter->removeCounter(widget);
|
||||
}
|
||||
m_imageViewerTabWidget->removeTab(tabIndex);
|
||||
}
|
||||
widget->deleteLater();
|
||||
}
|
||||
}
|
||||
|
||||
if (!mapLayer || mapLayer->layerType() == MapLayer::LayerType::Raster)
|
||||
{
|
||||
if (m_recordFrameCounter)
|
||||
{
|
||||
m_recordFrameCounter->removeCounter(static_cast<RasterLayer*>(mapLayer));
|
||||
}
|
||||
}
|
||||
|
||||
// 删除 MapLayerStore 中的 mapLayer
|
||||
m_MapLayerStore->removeLayer(mapLayer);
|
||||
|
||||
@ -1131,10 +1135,6 @@ void HPPA::removeImageByTreeIndex()
|
||||
const int tabIndex = m_imageViewerTabWidget->indexOf(layerWidget);
|
||||
if (tabIndex >= 0)
|
||||
{
|
||||
if (m_recordFrameCounter)
|
||||
{
|
||||
m_recordFrameCounter->removeCounter(layerWidget);
|
||||
}
|
||||
m_imageViewerTabWidget->removeTab(tabIndex);
|
||||
}
|
||||
layerWidget->deleteLater();
|
||||
@ -1701,11 +1701,6 @@ QWidget* HPPA::onCreateTab(QString tabName)
|
||||
|
||||
m_imageViewerTabWidget->setCurrentIndex(m_imageViewerTabWidget->count() - 1);
|
||||
|
||||
if (m_recordFrameCounter)
|
||||
{
|
||||
m_recordFrameCounter->addCounter(tabTmp);
|
||||
}
|
||||
|
||||
return tabTmp;
|
||||
}
|
||||
|
||||
@ -1722,7 +1717,11 @@ void HPPA::onTabWidgetCurrentChanged(int index)//代码新建一个tab,会调
|
||||
if (m_recordFrameCounter)
|
||||
{
|
||||
QWidget* currentWidget = m_imageViewerTabWidget->widget(index);
|
||||
m_recordFrameCounter->switchTo(currentWidget);
|
||||
MapLayer* currentMapLayer = m_MapLayerStore->mapLayerForWidget(currentWidget);
|
||||
if (currentMapLayer)
|
||||
{
|
||||
m_recordFrameCounter->switchTo(static_cast<RasterLayer*>(currentMapLayer));
|
||||
}
|
||||
}
|
||||
|
||||
//获取绘图控件
|
||||
@ -2028,6 +2027,14 @@ void HPPA::onOpenImg()
|
||||
QString baseName = fi.completeBaseName();
|
||||
|
||||
addLayer(baseName, uri, true);
|
||||
|
||||
// 获取影像行数并更新帧数显示
|
||||
MapLayer* mapLayer = m_MapLayerStore->getLayerByAbsolutePath(uri);
|
||||
if (mapLayer && m_recordFrameCounter)
|
||||
{
|
||||
RasterLayer* rasterLayer = static_cast<RasterLayer*>(mapLayer);
|
||||
m_recordFrameCounter->updateFrameCount(rasterLayer, rasterLayer->height());
|
||||
}
|
||||
}
|
||||
|
||||
void HPPA::disconnectImagerAndCleanup()
|
||||
@ -2448,6 +2455,12 @@ void HPPA::onPlotHyperspectralImageRgbImage(int fileNumber, int frameNumber, QSt
|
||||
return;
|
||||
}
|
||||
|
||||
MapLayer* mapLayer = m_MapLayerStore->getLayerByAbsolutePath(filePath);
|
||||
if (mapLayer && m_recordFrameCounter)
|
||||
{
|
||||
m_recordFrameCounter->updateFrameCount(static_cast<RasterLayer*>(mapLayer), m_Imager->getFrameCounter());
|
||||
}
|
||||
|
||||
if (ui.mAction3DPlantPhenotypeScenario->isChecked())
|
||||
return;
|
||||
|
||||
@ -2459,11 +2472,6 @@ void HPPA::onPlotHyperspectralImageRgbImage(int fileNumber, int frameNumber, QSt
|
||||
QList<Mapcavas*> currentImageViewer = currentWidget->findChildren<Mapcavas*>();
|
||||
currentImageViewer[0]->DisplayFrameNumber(m_Imager->getFrameCounter());//界面中显示已经采集的帧数
|
||||
|
||||
if (m_recordFrameCounter)
|
||||
{
|
||||
m_recordFrameCounter->updateFrameCount(currentWidget, m_Imager->getFrameCounter());
|
||||
}
|
||||
|
||||
//创建需要显示的图像--opencv版本
|
||||
ImageProcessor imageProcessor;
|
||||
//cv::Mat rgbImage(*m_Imager->getRgbImage()->m_matRgbImage, cv::Range(0, m_Imager->getFrameCounter()), cv::Range::all());//2022.3.18重构的
|
||||
@ -2665,6 +2673,11 @@ void HPPA::addLayer(const QString& baseName, const QString& filePath,bool refres
|
||||
|
||||
if (m_MapLayerStore) m_MapLayerStore->addLayer(ml);
|
||||
|
||||
if (m_recordFrameCounter)
|
||||
{
|
||||
m_recordFrameCounter->addCounter(ml);
|
||||
}
|
||||
|
||||
if (isAddImage)
|
||||
{
|
||||
newImage(ml, RasterImageLayer::RendererType::Multiband, node, refresh);
|
||||
|
||||
@ -125,6 +125,15 @@ MapLayer* MapLayerStore::getLayerAt(int index) const
|
||||
return m_layers[index].mapLayer.get();
|
||||
}
|
||||
|
||||
MapLayer* MapLayerStore::getLayerByAbsolutePath(const QString& absolutePath) const
|
||||
{
|
||||
for (const auto& entry : m_layers) {
|
||||
if (entry.mapLayer->dataPath() == absolutePath)
|
||||
return entry.mapLayer.get();
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
int MapLayerStore::layerCount() const
|
||||
{
|
||||
return (int)m_layers.size();
|
||||
|
||||
@ -35,6 +35,7 @@ public:
|
||||
bool containsLayer(const QString& url, bool isAbsolutePath = true) const;
|
||||
|
||||
MapLayer* getLayer(const QString& name) const;
|
||||
MapLayer* getLayerByAbsolutePath(const QString& absolutePath) const;
|
||||
MapLayer* getLayerAt(int index) const;
|
||||
int layerCount() const;
|
||||
|
||||
@ -49,7 +50,7 @@ public:
|
||||
QWidget* widgetForImageLayer(RasterImageLayer* imageLayer) const;
|
||||
QWidget* widgetForLayer(MapLayer* layer) const;
|
||||
QWidget* widgetForLayer(const QString& absolutePath) const;
|
||||
std::vector<QWidget*> widgetsForMapLayer(MapLayer* mapLayer) const;
|
||||
std::vector<QWidget*> widgetsForMapLayer(MapLayer* mapLayer) const;
|
||||
|
||||
// Reverse lookups
|
||||
MapLayer* mapLayerForImageLayer(RasterImageLayer* imageLayer) const;
|
||||
|
||||
@ -78,3 +78,21 @@ std::vector<double> RasterLayer::bandWavelengths() const
|
||||
}
|
||||
return m_provider->bandWavelengths();
|
||||
}
|
||||
|
||||
int RasterLayer::width() const
|
||||
{
|
||||
if (!m_provider) {
|
||||
auto* self = const_cast<RasterLayer*>(this);
|
||||
if (!self->openDataProvider()) return 0;
|
||||
}
|
||||
return m_provider->width();
|
||||
}
|
||||
|
||||
int RasterLayer::height() const
|
||||
{
|
||||
if (!m_provider) {
|
||||
auto* self = const_cast<RasterLayer*>(this);
|
||||
if (!self->openDataProvider()) return 0;
|
||||
}
|
||||
return m_provider->height();
|
||||
}
|
||||
|
||||
@ -31,6 +31,10 @@ public:
|
||||
// Get all band wavelengths
|
||||
std::vector<double> bandWavelengths() const;
|
||||
|
||||
// Get dimensions
|
||||
int width() const;
|
||||
int height() const;
|
||||
|
||||
protected:
|
||||
std::unique_ptr<RasterDataProvider> m_provider;
|
||||
};
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
#include "stdafx.h"
|
||||
#include "recordFrameCounter.h"
|
||||
#include "RasterLayer.h"
|
||||
|
||||
recordFrameCounter::recordFrameCounter(QWidget* parent)
|
||||
: QWidget(parent)
|
||||
@ -16,19 +17,19 @@ recordFrameCounter::recordFrameCounter(QWidget* parent)
|
||||
layout->addWidget(m_stackedWidget);
|
||||
}
|
||||
|
||||
void recordFrameCounter::addCounter(QWidget* tabWidget)
|
||||
void recordFrameCounter::addCounter(RasterLayer* mapLayer)
|
||||
{
|
||||
QLabel* label = new QLabel("0");
|
||||
label->setStyleSheet("color: white;");
|
||||
label->setAlignment(Qt::AlignVCenter | Qt::AlignLeft);
|
||||
m_labelMap.insert(tabWidget, label);
|
||||
m_labelMap.insert(mapLayer, label);
|
||||
m_stackedWidget->addWidget(label);
|
||||
m_stackedWidget->setCurrentWidget(label);
|
||||
}
|
||||
|
||||
void recordFrameCounter::removeCounter(QWidget* tabWidget)
|
||||
void recordFrameCounter::removeCounter(RasterLayer* mapLayer)
|
||||
{
|
||||
auto it = m_labelMap.find(tabWidget);
|
||||
auto it = m_labelMap.find(mapLayer);
|
||||
if (it != m_labelMap.end())
|
||||
{
|
||||
QLabel* label = it.value();
|
||||
@ -38,18 +39,18 @@ void recordFrameCounter::removeCounter(QWidget* tabWidget)
|
||||
}
|
||||
}
|
||||
|
||||
void recordFrameCounter::switchTo(QWidget* tabWidget)
|
||||
void recordFrameCounter::switchTo(RasterLayer* mapLayer)
|
||||
{
|
||||
auto it = m_labelMap.find(tabWidget);
|
||||
auto it = m_labelMap.find(mapLayer);
|
||||
if (it != m_labelMap.end())
|
||||
{
|
||||
m_stackedWidget->setCurrentWidget(it.value());
|
||||
}
|
||||
}
|
||||
|
||||
void recordFrameCounter::updateFrameCount(QWidget* tabWidget, int frameCount)
|
||||
void recordFrameCounter::updateFrameCount(RasterLayer* mapLayer, int frameCount)
|
||||
{
|
||||
auto it = m_labelMap.find(tabWidget);
|
||||
auto it = m_labelMap.find(mapLayer);
|
||||
if (it != m_labelMap.end())
|
||||
{
|
||||
it.value()->setText(QString::number(frameCount));
|
||||
|
||||
@ -6,19 +6,20 @@
|
||||
#include <QHBoxLayout>
|
||||
#include <QMap>
|
||||
|
||||
class RasterLayer;
|
||||
|
||||
class recordFrameCounter : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit recordFrameCounter(QWidget* parent = nullptr);
|
||||
|
||||
void addCounter(QWidget* tabWidget);
|
||||
void removeCounter(QWidget* tabWidget);
|
||||
void switchTo(QWidget* tabWidget);
|
||||
void updateFrameCount(QWidget* tabWidget, int frameCount);
|
||||
void addCounter(RasterLayer* mapLayer);
|
||||
void removeCounter(RasterLayer* mapLayer);
|
||||
void switchTo(RasterLayer* mapLayer);
|
||||
void updateFrameCount(RasterLayer* mapLayer, int frameCount);
|
||||
|
||||
private:
|
||||
QStackedWidget* m_stackedWidget = nullptr;
|
||||
QMap<QWidget*, QLabel*> m_labelMap;
|
||||
QMap<RasterLayer*, QLabel*> m_labelMap;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user