From: bshsqa <32317749+bshsqa@users.noreply.github.com> Date: Mon, 24 Aug 2020 01:11:54 +0000 (+0900) Subject: [NUI] Fix capture issue of to capture sub-scene. (#1931) X-Git-Tag: accepted/tizen/unified/20210219.040944~473 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=cbc87d1fb05eeff93b220484598e0e42c44ad283;p=platform%2Fcore%2Fcsapi%2Ftizenfx.git [NUI] Fix capture issue of to capture sub-scene. (#1931) Signed-off-by: seungho Co-authored-by: seungho --- diff --git a/src/Tizen.NUI/src/internal/Interop/Interop.Capture.cs b/src/Tizen.NUI/src/internal/Interop/Interop.Capture.cs index bc8bf37..f51a3d4 100755 --- a/src/Tizen.NUI/src/internal/Interop/Interop.Capture.cs +++ b/src/Tizen.NUI/src/internal/Interop/Interop.Capture.cs @@ -27,11 +27,20 @@ namespace Tizen.NUI public static extern IntPtr Assign(HandleRef jarg1, HandleRef jarg2); [DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_Capture_Start_1")] - public static extern void Start1(HandleRef jarg0, HandleRef jarg1, HandleRef jarg2, string jarg3, HandleRef jarg4); + public static extern void Start1(HandleRef capture, HandleRef source, HandleRef size, string path, HandleRef clearColor); [DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_Capture_Start_2")] public static extern void Start2(HandleRef capture, HandleRef source, HandleRef size, string path); + [DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_Capture_Start_3")] + public static extern void Start3(HandleRef capture, HandleRef source, HandleRef size, string path, HandleRef clearColor, uint quality); + + [DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_Capture_Start_4")] + public static extern void Start4(HandleRef capture, HandleRef source, HandleRef position, HandleRef size, string path, HandleRef clearColor); + + [DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_Capture_SetImageQuality")] + public static extern void SetImageQuality(HandleRef capture, uint quality); + [DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_Capture_Signal_Empty")] public static extern bool SignalEmpty(HandleRef jarg1); diff --git a/src/Tizen.NUI/src/public/Capture.cs b/src/Tizen.NUI/src/public/Capture.cs index 06dc9cf..af2fd4a 100755 --- a/src/Tizen.NUI/src/public/Capture.cs +++ b/src/Tizen.NUI/src/public/Capture.cs @@ -44,6 +44,9 @@ namespace Tizen.NUI /// else { //capture failure, do something. } /// } /// + /// suppose that we want to capture View 'A'. And, the View 'A' is overlapped by another View 'B' that is not a child of 'A'. + /// in this case, if source is root of scene, the captured image includes a part of View 'B' on the 'A'. + /// however, if source is just View 'A', the result includes only 'A'. /// [EditorBrowsable(EditorBrowsableState.Never)] public class Capture : BaseHandle @@ -93,7 +96,77 @@ namespace Tizen.NUI /// /// Start capture and save the image as a file. /// - /// source View or Layer to be used for capture. + /// source View or Layer to be used for capture. + /// This source must be added on the window in advance. + /// top-left position of area to be captured. + /// this position is defined in the window. + /// captured size. + /// image file path to be saved as a file. + /// If path is empty string, the captured result is not be saved as a file. + /// background color of captured scene. + /// This exception can be due to the invalid size values, of when width or height is lower than zero. + /// This exception is due to the path is null. + [EditorBrowsable(EditorBrowsableState.Never)] + public void Start(Container source, Position position, Size size, string path, Color color ) + { + if (size.Width <= 0 || size.Height <=0) + { + throw new InvalidOperationException("size should larger than zero"); + } + else if (null == path) + { + throw new ArgumentNullException("path should not be null"); + } + + if (source is View || source is Layer) + { + Interop.Capture.Start4(swigCPtr, source.SwigCPtr, new Vector2(position.X, position.Y).SwigCPtr, new Vector2(size.Width, size.Height).SwigCPtr, path, new Vector4(color.R, color.G, color.B, color.A).SwigCPtr); + + if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); + } + } + + /// + /// Start capture and save the image as a file. + /// + /// source View or Layer to be used for capture. + /// This source must be added on the window in advance. + /// captured size. + /// image file path to be saved as a file. + /// If path is empty string, the captured result is not be saved as a file. + /// background color of captured scene. + /// The value to control image quality for jpeg file format in the range [1, 100]. + /// This exception can be due to the invalid size values, of when width or height is lower than zero. + /// This exception is due to the path is null. + [EditorBrowsable(EditorBrowsableState.Never)] + public void Start(Container source, Size size, string path, Color color, uint quality ) + { + if (size.Width <= 0 || size.Height <=0) + { + throw new InvalidOperationException("size should larger than zero"); + } + else if (null == path) + { + throw new ArgumentNullException("path should not be null"); + } + else if (quality > 100) + { + throw new InvalidOperationException("quality should between 0 to 100"); + } + + if (source is View || source is Layer) + { + Interop.Capture.Start3(swigCPtr, source.SwigCPtr, new Vector2(size.Width, size.Height).SwigCPtr, path, new Vector4(color.R, color.G, color.B, color.A).SwigCPtr, quality); + + if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); + } + } + + /// + /// Start capture and save the image as a file. + /// + /// source View or Layer to be used for capture. + /// This source must be added on the window in advance. /// captured size. /// image file path to be saved as a file. /// If path is empty string, the captured result is not be saved as a file. @@ -126,7 +199,8 @@ namespace Tizen.NUI /// /// Background color of captured scene is transparent. /// - /// source View or Layer to be used for capture. + /// source View or Layer to be used for capture. + /// This source must be added on the window in advance. /// captured size. /// image file path to be saved as a file. /// If path is empty string, the captured result is not be saved as a file. @@ -152,6 +226,22 @@ namespace Tizen.NUI } } + /// + /// Set result image quality in case of jpeg. + /// + /// quality The value to control image quality for jpeg file format in the range [1, 100] + /// This exception can be due to the invalid size values, of when quality is lower than zero or over than 100. + [EditorBrowsable(EditorBrowsableState.Never)] + public void SetImageQuality(uint quality) + { + if (quality < 0 || quality > 100) + { + throw new InvalidOperationException("quality should between zero to 100"); + } + + Interop.Capture.SetImageQuality(swigCPtr, quality); + } + private void onFinished(IntPtr data, int state) { if (data != IntPtr.Zero)