From: Eunki, Hong Date: Mon, 23 Sep 2024 10:51:12 +0000 (+0900) Subject: [NUI] Support ImageView and ImageVisual the SamplingMode X-Git-Tag: submit/tizen/20240925.121854~1^2~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c748b61c1f9ece040b70f2a42c94e4c647e55960;p=platform%2Fcore%2Fcsapi%2Ftizenfx.git [NUI] Support ImageView and ImageVisual the SamplingMode Let we add property for change sampling mode when we change desired size of given image. Relative dali patch https://review.tizen.org/gerrit/c/platform/core/uifw/dali-core/+/317969 https://review.tizen.org/gerrit/c/platform/core/uifw/dali-adaptor/+/317993 https://review.tizen.org/gerrit/c/platform/core/uifw/dali-toolkit/+/317992 https://review.tizen.org/gerrit/c/platform/core/uifw/dali-demo/+/318001 Signed-off-by: Eunki, Hong --- diff --git a/src/Tizen.NUI/src/public/BaseComponents/ImageView.cs b/src/Tizen.NUI/src/public/BaseComponents/ImageView.cs index dd8fbde62..8297bb9cf 100755 --- a/src/Tizen.NUI/src/public/BaseComponents/ImageView.cs +++ b/src/Tizen.NUI/src/public/BaseComponents/ImageView.cs @@ -125,6 +125,7 @@ namespace Tizen.NUI.BaseComponents ImageVisualProperty.AlphaMaskURL, ImageVisualProperty.CropToMask, Visual.Property.VisualFittingMode, + ImageVisualProperty.SamplingMode, ImageVisualProperty.DesiredWidth, ImageVisualProperty.DesiredHeight, ImageVisualProperty.ReleasePolicy, @@ -1288,6 +1289,32 @@ namespace Tizen.NUI.BaseComponents } } + /// + /// Gets or sets filtering options used when resizing images to the sample original pixels.
+ /// If not supplied, the default is SamplingModeType.BoxThenLinear.
+ /// For normal quad images only.
+ /// Optional. + ///
+ [EditorBrowsable(EditorBrowsableState.Never)] + public SamplingModeType SamplingMode + { + get + { + int ret = (int)SamplingModeType.BoxThenLinear; + + using PropertyValue samplingMode = GetCachedImageVisualProperty(ImageVisualProperty.SamplingMode); + samplingMode?.Get(out ret); + + return (SamplingModeType)ret; + } + set + { + using PropertyValue setValue = new PropertyValue((int)value); + UpdateImage(ImageVisualProperty.SamplingMode, setValue); + NotifyPropertyChanged(); + } + } + /// /// This method allows users to configure the blending of two images(previous and currnet) using alpha values. /// diff --git a/src/Tizen.NUI/src/public/Visuals/VisualConstants.cs b/src/Tizen.NUI/src/public/Visuals/VisualConstants.cs index ae43965d2..16ce53074 100755 --- a/src/Tizen.NUI/src/public/Visuals/VisualConstants.cs +++ b/src/Tizen.NUI/src/public/Visuals/VisualConstants.cs @@ -199,7 +199,17 @@ namespace Tizen.NUI /// /// For caching algorithms where a client strongly prefers a cache-hit to reuse a cached image. /// - DontCare + DontCare, + /// + /// Use Lanczos resample algorithm. + /// + [EditorBrowsable(EditorBrowsableState.Never)] + Lanczos, + /// + /// Iteratively box filter to generate an image of 1/2, 1/4, 1/8 etc width and height and approximately the desired size, then apply Lanczos resample algorithm. + /// + [EditorBrowsable(EditorBrowsableState.Never)] + BoxThenLanczos, } /// diff --git a/src/Tizen.NUI/src/public/Visuals/VisualObject/ImageVisual.cs b/src/Tizen.NUI/src/public/Visuals/VisualObject/ImageVisual.cs index c1f60836f..2b1c51168 100644 --- a/src/Tizen.NUI/src/public/Visuals/VisualObject/ImageVisual.cs +++ b/src/Tizen.NUI/src/public/Visuals/VisualObject/ImageVisual.cs @@ -331,6 +331,28 @@ namespace Tizen.NUI.Visuals } } + /// + /// Gets or sets filtering options used when resizing images to the sample original pixels.
+ /// If not supplied, the default is SamplingModeType.BoxThenLinear.
+ /// For normal quad images only.
+ /// Optional. + ///
+ [EditorBrowsable(EditorBrowsableState.Never)] + public SamplingModeType SamplingMode + { + set + { + UpdateVisualProperty((int)Tizen.NUI.ImageVisualProperty.SamplingMode, new PropertyValue((int)value)); + } + get + { + int ret = (int)SamplingModeType.BoxThenLinear; + var propertyValue = GetCachedVisualProperty((int)Tizen.NUI.ImageVisualProperty.SamplingMode); + propertyValue?.Get(out ret); + return (SamplingModeType)ret; + } + } + /// /// Gets or sets the desired image width.
/// If not specified, the actual image width is used.
diff --git a/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/VisualTest.cs b/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/VisualTest.cs index 54dbea7b4..32fe162a9 100755 --- a/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/VisualTest.cs +++ b/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/VisualTest.cs @@ -90,6 +90,18 @@ namespace Tizen.NUI.Samples { focusIndicatorVisual.ResourceUrl = focusIndicatorImageUrl; } + else if(e.Key.KeyPressedName == "6") + { + View focusedView = FocusManager.Instance.GetCurrentFocusView(); + if(focusedView != null) + { + var thumbnailVisual = focusedView.FindVisualByName("thumbnailImage") as Visuals.ImageVisual; + if(thumbnailVisual != null) + { + thumbnailVisual.SamplingMode = GetNextSamplingModeType(thumbnailVisual.SamplingMode); + } + } + } } } @@ -314,6 +326,8 @@ namespace Tizen.NUI.Samples SynchronousSizing = true, + SamplingMode = SamplingModeType.BoxThenLanczos, + OffsetXPolicy = VisualTransformPolicyType.Absolute, OffsetYPolicy = VisualTransformPolicyType.Absolute, WidthPolicy = VisualTransformPolicyType.Absolute, @@ -390,5 +404,57 @@ namespace Tizen.NUI.Samples return view; } + + static private SamplingModeType GetNextSamplingModeType(SamplingModeType currentSamplingMode) + { + SamplingModeType nextSamplingMode = SamplingModeType.DontCare; + switch(currentSamplingMode) + { + case SamplingModeType.Box: + { + nextSamplingMode = SamplingModeType.Nearest; + break; + } + case SamplingModeType.Nearest: + { + nextSamplingMode = SamplingModeType.Linear; + break; + } + case SamplingModeType.Linear: + { + nextSamplingMode = SamplingModeType.BoxThenNearest; + break; + } + case SamplingModeType.BoxThenNearest: + { + nextSamplingMode = SamplingModeType.BoxThenLinear; + break; + } + case SamplingModeType.BoxThenLinear: + { + nextSamplingMode = SamplingModeType.Lanczos; + break; + } + case SamplingModeType.Lanczos: + { + nextSamplingMode = SamplingModeType.BoxThenLanczos; + break; + } + case SamplingModeType.BoxThenLanczos: + { + nextSamplingMode = SamplingModeType.DontCare; + break; + } + case SamplingModeType.DontCare: + default: + { + nextSamplingMode = SamplingModeType.Box; + break; + } + } + Tizen.Log.Error("NUI", $"Change sampling mode from [{currentSamplingMode}] to [{nextSamplingMode}]\n"); + + return nextSamplingMode; + } } }