File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -22,6 +22,8 @@ struct MaaStringBuffer
2222 virtual void set (std::string str) = 0;
2323};
2424
25+ using ImageEncodedBuffer = std::vector<uint8_t >;
26+
2527struct MaaImageBuffer
2628{
2729public:
@@ -42,4 +44,5 @@ struct MaaImageBuffer
4244 virtual const cv::Mat& get () const = 0;
4345
4446 virtual void set (cv::Mat image) = 0;
47+ virtual void set (ImageEncodedBuffer buffer) = 0;
4548};
Original file line number Diff line number Diff line change 11#pragma once
22
33#include " BufferTypes.hpp"
4- #include " MaaUtils/Conf.h"
54#include " ListBuffer.hpp"
5+ #include " MaaUtils/Conf.h"
66
77MAA_SUPPRESS_CV_WARNINGS_BEGIN
88#include < opencv2/core/mat.hpp>
@@ -21,6 +21,8 @@ class ImageBuffer : public MaaImageBuffer
2121 {
2222 }
2323
24+ ImageBuffer (ImageEncodedBuffer buffer) { from_encoded (std::move (buffer)); }
25+
2426 virtual ~ImageBuffer () override = default ;
2527
2628 virtual bool empty () const override { return image_.empty (); }
@@ -61,7 +63,16 @@ class ImageBuffer : public MaaImageBuffer
6163 image_ = image.clone ();
6264 }
6365
66+ virtual void set (ImageEncodedBuffer buffer) override { from_encoded (std::move (buffer)); }
67+
6468private:
69+ void from_encoded (ImageEncodedBuffer buffer)
70+ {
71+ image_ = cv::imdecode (buffer, cv::IMREAD_COLOR );
72+ encoded_cache_ = std::move (buffer);
73+ dirty_ = false ;
74+ }
75+
6576 void encode () const
6677 {
6778 if (!dirty_) {
@@ -79,7 +90,7 @@ class ImageBuffer : public MaaImageBuffer
7990
8091 cv::Mat image_;
8192 mutable bool dirty_ = true ;
82- mutable std::vector< uint8_t > encoded_cache_;
93+ mutable ImageEncodedBuffer encoded_cache_;
8394};
8495
8596MAA_NS_END
You can’t perform that action at this time.
0 commit comments