兼容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);
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);

View File

@ -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();

View File

@ -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;

View File

@ -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();
}

View File

@ -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;
};

View File

@ -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));

View File

@ -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;
};