5 * Copyright (c) 2020 Samsung Electronics Co., Ltd.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
22 #include <dali/public-api/actors/actor.h>
23 #include <dali/public-api/actors/camera-actor.h>
24 #include <dali/public-api/signals/dali-signal.h>
27 #include <dali/public-api/adaptor-framework/native-image-source.h>
28 #include <dali/public-api/dali-adaptor-common.h>
33 * @addtogroup dali_adaptor_framework
37 namespace Internal DALI_INTERNAL
43 } // namespace DALI_INTERNAL
46 * @brief Capture snapshots the current scene and save as a file.
50 * Applications should follow the example below to create capture :
53 * Capture capture = Capture::New();
56 * If required, you can also connect class member function to a signal :
59 * capture.FinishedSignal().Connect(this, &CaptureSceneExample::OnCaptureFinished);
62 * At the connected class member function, you can know whether capture finish state.
65 * void CaptureSceneExample::OnCaptureFinished( Capture capture, Capture::FinishState state )
67 * if ( state == Capture::FinishState::SUCCEEDED )
78 class DALI_ADAPTOR_API Capture : public BaseHandle
82 * @brief The enumerations used for checking capture success
85 enum class FinishState
87 SUCCEEDED, ///< Succeeded in saving the result after capture
88 FAILED ///< Failed to capture by time out or to save the result
92 * @brief Typedef for finished signals sent by this class.
96 typedef Signal<void(Capture, Capture::FinishState)> CaptureFinishedSignalType;
99 * @brief Create an uninitialized Capture; this can be initialized with Actor::New().
103 * Calling member functions with an uninitialized Dali::Object is not allowed.
108 * @brief Create an initialized Capture.
112 * @return A handle to a newly allocated Dali resource.
113 * @note Projection mode of default cameraActor is Dali::Camera::PERSPECTIVE_PROJECTION
115 static Capture New();
118 * @brief Create an initialized Capture.
122 * @param[in] cameraActor An initialized CameraActor.
123 * @return A handle to a newly allocated Dali resource.
125 static Capture New(Dali::CameraActor cameraActor);
128 * @brief Downcast an Object handle to Capture handle.
132 * If handle points to a Capture object the downcast produces valid
133 * handle. If not the returned handle is left uninitialized.
135 * @param[in] handle to An object.
136 * @return handle to a Capture object or an uninitialized handle.
138 static Capture DownCast(BaseHandle handle);
141 * @brief Dali::Actor is intended as a base class.
145 * This is non-virtual since derived Handle types must not contain data or virtual methods.
150 * @brief This copy constructor is required for (smart) pointer semantics.
154 * @param[in] copy A reference to the copied handle.
156 Capture(const Capture& copy);
159 * @brief This assignment operator is required for (smart) pointer semantics.
163 * @param[in] rhs A reference to the copied handle.
164 * @return A reference to this.
166 Capture& operator=(const Capture& rhs);
169 * @brief Move constructor.
172 * @param[in] rhs A reference to the moved handle
174 Capture(Capture&& rhs);
177 * @brief Move assignment operator.
180 * @param[in] rhs A reference to the moved handle
181 * @return A reference to this handle
183 Capture& operator=(Capture&& rhs);
186 * @brief Start capture and save the image as a file.
189 * @param[in] source source actor to be used for capture.
190 * This source must be added on the window in advance.
191 * @param[in] position top-left position of area to be captured
192 * this position is defined in the window.
193 * @param[in] size captured size.
194 * @param[in] path image file path to be saved as a file.
195 * If path is empty string, the captured result is not be saved as a file.
196 * @param[in] clearColor background color of captured scene
197 * @note suppose that we want to capture actor 'A'. And, the actor 'A' is overlapped by another actor 'B' that is not a child of 'A'.
198 * in this case, if source is root of scene, the captured image includes a part of actor 'B' on the 'A'.
199 * however, if source is just actor 'A', the result includes only 'A'.
201 void Start(Actor source, const Vector2& position, const Vector2& size, const std::string& path, const Vector4& clearColor);
204 * @brief Start capture and save the image as a file.
208 * @param[in] source source actor to be used for capture.
209 * This source must be added on the window in advance.
210 * @param[in] size captured size.
211 * @param[in] path image file path to be saved as a file.
212 * If path is empty string, the captured result is not be saved as a file.
213 * @param[in] clearColor background color of captured scene
214 * @param[in] quality The value to control image quality for jpeg file format in the range [1, 100]
216 void Start(Actor source, const Vector2& size, const std::string& path, const Vector4& clearColor, const uint32_t quality);
219 * @brief Start capture and save the image as a file.
223 * @param[in] source source actor to be used for capture.
224 * This source must be added on the window in advance.
225 * @param[in] size captured size.
226 * @param[in] path image file path to be saved as a file.
227 * If path is empty string, the captured result is not be saved as a file.
228 * @param[in] clearColor background color of captured scene
230 void Start(Actor source, const Vector2& size, const std::string& path, const Vector4& clearColor);
233 * @brief Start capture and save the image as a file.
237 * @param[in] source source actor to be used for capture.
238 * This source must be added on the window in advance.
239 * @param[in] size captured size.
240 * @param[in] path image file path to be saved as a file.
241 * If path is empty string, the captured result is not be saved as a file.
242 * @note Clear color is transparent.
244 void Start(Actor source, const Vector2& size, const std::string& path);
247 * @brief Set result image quality in case of jpeg
249 * @param[in] quality The value to control image quality for jpeg file format in the range [1, 100]
251 void SetImageQuality(uint32_t quality);
254 * @brief Get NativeImageSourcePtr that is saved captured image.
258 * @return NativeImageSourcePtr Captured result that can be rendered with DALi
260 Dali::NativeImageSourcePtr GetNativeImageSource() const;
263 * @brief Get finished signal.
267 * @return finished signal instance.
269 CaptureFinishedSignalType& FinishedSignal();
271 public: // Not intended for application developers
274 * @brief This constructor is used by New() methods.
278 * @param[in] internal A pointer to a newly allocated Dali resource.
280 explicit DALI_INTERNAL Capture(Internal::Adaptor::Capture* internal);
290 #endif // DALI_CAPTURE_H