public Block ConvertToBlock(IImage <T> input, IEnumerable <IFitsValue> extraKeys, bool isXtension = false) { if (input is null) { throw new ArgumentNullException(nameof(input), SR.NullArgument); } AllowedTypes.ValidateDataType <T>(); var extraKeysInst = (extraKeys ?? Enumerable.Empty <IFitsValue>()).ToList(); // Throws if mandatory keys are present Extensions.CheckExtraFitsKeys(extraKeysInst); var bitPix = FitsCs.Extensions.ConvertTypeToBitPix <T>() ?? throw new InvalidOperationException(string.Format(SR.TypeNotSupported, typeof(T))); var desc = new Descriptor( bitPix, new[] { input.Width, input.Height }, isXtension ? ExtensionType.Image : ExtensionType.Primary); var keys = new List <IFitsValue>(extraKeysInst.Count + 10); keys.AddRange(desc.GenerateFitsHeader()); keys.AddRange(extraKeysInst); keys.Add(FitsKey.CreateEnd()); var block = Block <T> .CreateWithData(desc, keys, x => { input.GetView().CopyTo(x); }); return(block); }