/// <summary> /// Set a GObject property. The value is converted to the property type, if possible. /// </summary> /// <param name="name">The name of the property to set.</param> /// <param name="flags">See <see cref="Internal.Enums.VipsArgumentFlags"/>.</param> /// <param name="matchImage">A <see cref="Image"/> used as guide.</param> /// <param name="value">The value.</param> private void Set(string name, Internal.Enums.VipsArgumentFlags flags, Image matchImage, object value) { // logger.Debug($"Operation.Set: name = {name}, flags = {flags}, " + // $"matchImage = {matchImage} value = {value}"); // if the object wants an image and we have a constant, Imageize it // // if the object wants an image array, Imageize any constants in the // array if (matchImage != null) { var gtype = GetTypeOf(name); if (gtype == GValue.ImageType) { value = Image.Imageize(matchImage, value); } else if (gtype == GValue.ArrayImageType) { if (!(value is Array values) || values.Rank != 1) { throw new Exception( $"unsupported value type {value.GetType()} for VipsArrayImage"); } var images = new Image[values.Length]; for (var i = 0; i < values.Length; i++) { ref var image = ref images[i]; image = Image.Imageize(matchImage, values.GetValue(i)); } value = images; } }
/// <summary> /// Set a GObject property. The value is converted to the property type, if possible. /// </summary> /// <param name="name"></param> /// <param name="matchImage"></param> /// <param name="value"></param> /// <param name="flags">See <see cref="Internal.Enums.VipsArgumentFlags"/></param> private void Set(string name, Internal.Enums.VipsArgumentFlags flags, Image matchImage, object value) { // logger.Debug($"Operation.Set: name = {name}, flags = {flags}, " + // $"matchImage = {matchImage} value = {value}"); // if the object wants an image and we have a constant, Imageize it // // if the object wants an image array, Imageize any constants in the // array if (!(matchImage is null)) { var gtype = GetTypeOf(name); if (gtype == GValue.ImageType) { value = Image.Imageize(matchImage, value); } else if (gtype == GValue.ArrayImageType && value is object[] values) { value = values.Smap(x => Image.Imageize(matchImage, x)); } } // MODIFY args need to be copied before they are set if ((flags & Internal.Enums.VipsArgumentFlags.VIPS_ARGUMENT_MODIFY) != 0 && value is Image image) { // logger.Debug($"copying MODIFY arg {name}"); // make sure we have a unique copy value = image.Copy().CopyMemory(); } base.Set(name, value); }
/// <summary> /// Set a GObject property. The value is converted to the property type, if possible. /// </summary> /// <param name="name">The name of the property to set.</param> /// <param name="flags">See <see cref="Internal.Enums.VipsArgumentFlags"/>.</param> /// <param name="value">The value.</param> private void Set(string name, Internal.Enums.VipsArgumentFlags flags, object value) { // MODIFY args need to be copied before they are set if ((flags & Internal.Enums.VipsArgumentFlags.VIPS_ARGUMENT_MODIFY) != 0 && value is Image image) { // logger.Debug($"copying MODIFY arg {name}"); // make sure we have a unique copy value = image.Copy().CopyMemory(); } Set(name, value); }