兼容2种帧数显示逻辑:(1)采集时的实时帧数(2)打开影像时的帧数;
This commit is contained in:
tangchao0503
2026-05-28 00:44:59 +08:00
parent 3568495aa9
commit 5f965f0d8e
7 changed files with 81 additions and 34 deletions

View File

@ -1064,16 +1064,20 @@ void HPPA::removeLayerByNode(LayerTreeNode* node)
const int tabIndex = m_imageViewerTabWidget->indexOf(widget); const int tabIndex = m_imageViewerTabWidget->indexOf(widget);
if (tabIndex >= 0) if (tabIndex >= 0)
{ {
if (m_recordFrameCounter)
{
m_recordFrameCounter->removeCounter(widget);
}
m_imageViewerTabWidget->removeTab(tabIndex); m_imageViewerTabWidget->removeTab(tabIndex);
} }
widget->deleteLater(); widget->deleteLater();
} }
} }
if (!mapLayer || mapLayer->layerType() == MapLayer::LayerType::Raster)
{
if (m_recordFrameCounter)
{
m_recordFrameCounter->removeCounter(static_cast<RasterLayer*>(mapLayer));
}
}
// 删除 MapLayerStore 中的 mapLayer // 删除 MapLayerStore 中的 mapLayer
m_MapLayerStore->removeLayer(mapLayer); m_MapLayerStore->removeLayer(mapLayer);
@ -1131,10 +1135,6 @@ void HPPA::removeImageByTreeIndex()
const int tabIndex = m_imageViewerTabWidget->indexOf(layerWidget); const int tabIndex = m_imageViewerTabWidget->indexOf(layerWidget);
if (tabIndex >= 0) if (tabIndex >= 0)
{ {
if (m_recordFrameCounter)
{
m_recordFrameCounter->removeCounter(layerWidget);
}
m_imageViewerTabWidget->removeTab(tabIndex); m_imageViewerTabWidget->removeTab(tabIndex);
} }
layerWidget->deleteLater(); layerWidget->deleteLater();
@ -1701,11 +1701,6 @@ QWidget* HPPA::onCreateTab(QString tabName)
m_imageViewerTabWidget->setCurrentIndex(m_imageViewerTabWidget->count() - 1); m_imageViewerTabWidget->setCurrentIndex(m_imageViewerTabWidget->count() - 1);
if (m_recordFrameCounter)
{
m_recordFrameCounter->addCounter(tabTmp);
}
return tabTmp; return tabTmp;
} }
@ -1722,7 +1717,11 @@ void HPPA::onTabWidgetCurrentChanged(int index)//代码新建一个tab会调
if (m_recordFrameCounter) if (m_recordFrameCounter)
{ {
QWidget* currentWidget = m_imageViewerTabWidget->widget(index); 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(); QString baseName = fi.completeBaseName();
addLayer(baseName, uri, true); 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() void HPPA::disconnectImagerAndCleanup()
@ -2448,6 +2455,12 @@ void HPPA::onPlotHyperspectralImageRgbImage(int fileNumber, int frameNumber, QSt
return; 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()) if (ui.mAction3DPlantPhenotypeScenario->isChecked())
return; return;
@ -2459,11 +2472,6 @@ void HPPA::onPlotHyperspectralImageRgbImage(int fileNumber, int frameNumber, QSt
QList<Mapcavas*> currentImageViewer = currentWidget->findChildren<Mapcavas*>(); QList<Mapcavas*> currentImageViewer = currentWidget->findChildren<Mapcavas*>();
currentImageViewer[0]->DisplayFrameNumber(m_Imager->getFrameCounter());//界面中显示已经采集的帧数 currentImageViewer[0]->DisplayFrameNumber(m_Imager->getFrameCounter());//界面中显示已经采集的帧数
if (m_recordFrameCounter)
{
m_recordFrameCounter->updateFrameCount(currentWidget, m_Imager->getFrameCounter());
}
//创建需要显示的图像--opencv版本 //创建需要显示的图像--opencv版本
ImageProcessor imageProcessor; ImageProcessor imageProcessor;
//cv::Mat rgbImage(*m_Imager->getRgbImage()->m_matRgbImage, cv::Range(0, m_Imager->getFrameCounter()), cv::Range::all());//2022.3.18重构的 //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_MapLayerStore) m_MapLayerStore->addLayer(ml);
if (m_recordFrameCounter)
{
m_recordFrameCounter->addCounter(ml);
}
if (isAddImage) if (isAddImage)
{ {
newImage(ml, RasterImageLayer::RendererType::Multiband, node, refresh); newImage(ml, RasterImageLayer::RendererType::Multiband, node, refresh);

View File

@ -125,6 +125,15 @@ MapLayer* MapLayerStore::getLayerAt(int index) const
return m_layers[index].mapLayer.get(); 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 int MapLayerStore::layerCount() const
{ {
return (int)m_layers.size(); return (int)m_layers.size();

View File

@ -35,6 +35,7 @@ public:
bool containsLayer(const QString& url, bool isAbsolutePath = true) const; bool containsLayer(const QString& url, bool isAbsolutePath = true) const;
MapLayer* getLayer(const QString& name) const; MapLayer* getLayer(const QString& name) const;
MapLayer* getLayerByAbsolutePath(const QString& absolutePath) const;
MapLayer* getLayerAt(int index) const; MapLayer* getLayerAt(int index) const;
int layerCount() const; int layerCount() const;

View File

@ -78,3 +78,21 @@ std::vector<double> RasterLayer::bandWavelengths() const
} }
return m_provider->bandWavelengths(); 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();
}

View File

@ -31,6 +31,10 @@ public:
// Get all band wavelengths // Get all band wavelengths
std::vector<double> bandWavelengths() const; std::vector<double> bandWavelengths() const;
// Get dimensions
int width() const;
int height() const;
protected: protected:
std::unique_ptr<RasterDataProvider> m_provider; std::unique_ptr<RasterDataProvider> m_provider;
}; };

View File

@ -1,5 +1,6 @@
#include "stdafx.h" #include "stdafx.h"
#include "recordFrameCounter.h" #include "recordFrameCounter.h"
#include "RasterLayer.h"
recordFrameCounter::recordFrameCounter(QWidget* parent) recordFrameCounter::recordFrameCounter(QWidget* parent)
: QWidget(parent) : QWidget(parent)
@ -16,19 +17,19 @@ recordFrameCounter::recordFrameCounter(QWidget* parent)
layout->addWidget(m_stackedWidget); layout->addWidget(m_stackedWidget);
} }
void recordFrameCounter::addCounter(QWidget* tabWidget) void recordFrameCounter::addCounter(RasterLayer* mapLayer)
{ {
QLabel* label = new QLabel("0"); QLabel* label = new QLabel("0");
label->setStyleSheet("color: white;"); label->setStyleSheet("color: white;");
label->setAlignment(Qt::AlignVCenter | Qt::AlignLeft); label->setAlignment(Qt::AlignVCenter | Qt::AlignLeft);
m_labelMap.insert(tabWidget, label); m_labelMap.insert(mapLayer, label);
m_stackedWidget->addWidget(label); m_stackedWidget->addWidget(label);
m_stackedWidget->setCurrentWidget(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()) if (it != m_labelMap.end())
{ {
QLabel* label = it.value(); 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()) if (it != m_labelMap.end())
{ {
m_stackedWidget->setCurrentWidget(it.value()); 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()) if (it != m_labelMap.end())
{ {
it.value()->setText(QString::number(frameCount)); it.value()->setText(QString::number(frameCount));

View File

@ -6,19 +6,20 @@
#include <QHBoxLayout> #include <QHBoxLayout>
#include <QMap> #include <QMap>
class RasterLayer;
class recordFrameCounter : public QWidget class recordFrameCounter : public QWidget
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit recordFrameCounter(QWidget* parent = nullptr); explicit recordFrameCounter(QWidget* parent = nullptr);
void addCounter(QWidget* tabWidget); void addCounter(RasterLayer* mapLayer);
void removeCounter(QWidget* tabWidget); void removeCounter(RasterLayer* mapLayer);
void switchTo(QWidget* tabWidget); void switchTo(RasterLayer* mapLayer);
void updateFrameCount(QWidget* tabWidget, int frameCount); void updateFrameCount(RasterLayer* mapLayer, int frameCount);
private: private:
QStackedWidget* m_stackedWidget = nullptr; QStackedWidget* m_stackedWidget = nullptr;
QMap<QWidget*, QLabel*> m_labelMap; QMap<RasterLayer*, QLabel*> m_labelMap;
}; };