private static unsafe HeifStringEncoderParameter CreateStringParameter(SafeHeifEncoder encoder, heif_encoder_parameter nativeParameter, string name, bool hasDefaultValue) { string defaultValue = string.Empty; if (hasDefaultValue) { byte[] bytes = new byte[256]; fixed(byte *ptr = bytes) { // The error value is ignored because some encoders return an error // when getting the value of a valid command. _ = LibHeifNative.heif_encoder_get_parameter_string(encoder, name, ptr, bytes.Length); } int count = bytes.Length; // Look for the NUL terminator at the end of the string. for (int i = 0; i < bytes.Length; i++) { if (bytes[i] == 0) { count = i; break; } } defaultValue = System.Text.Encoding.ASCII.GetString(bytes, 0, count); } var error = LibHeifNative.heif_encoder_parameter_get_valid_string_values(nativeParameter, out var stringArray); error.ThrowIfError(); var validItems = stringArray.ToReadOnlyCollection(); return(new HeifStringEncoderParameter(name, hasDefaultValue, defaultValue, validItems)); }