#include "depth/DepthService.h" #include namespace core { QImage DepthService::computeFakeDepth(const QSize& size) { if (size.isEmpty() || size.width() <= 0 || size.height() <= 0) { return {}; } QImage depth(size, QImage::Format_Grayscale8); if (depth.isNull()) { return {}; } depth.fill(0); return depth; } QImage DepthService::computeFakeDepthFromBackground(const QImage& background) { if (background.isNull()) { return {}; } return computeFakeDepth(background.size()); } QImage DepthService::depthToColormapOverlay(const QImage& depth8, int alpha) { if (depth8.isNull()) { return {}; } const QImage src = (depth8.format() == QImage::Format_Grayscale8) ? depth8 : depth8.convertToFormat(QImage::Format_Grayscale8); if (src.isNull()) { return {}; } const int a = std::clamp(alpha, 0, 255); QImage out(src.size(), QImage::Format_ARGB32_Premultiplied); if (out.isNull()) { return {}; } for (int y = 0; y < src.height(); ++y) { const uchar* row = src.constScanLine(y); QRgb* dst = reinterpret_cast(out.scanLine(y)); for (int x = 0; x < src.width(); ++x) { const int d = static_cast(row[x]); // 0..255 // depth=0(远)-> 蓝;depth=255(近)-> 红 const int r = d; const int g = 0; const int b = 255 - d; dst[x] = qRgba(r, g, b, a); } } return out; } } // namespace core