public static bool TryGetBitmapBGR(IDenseTensor <float> src, out SpanBitmap <Vector3> bmp) { bmp = default; var dims = src.Dimensions; if (dims.Length < 3 || dims.Length > 4) { return(false); } if (dims.Length == 4) { if (dims[0] != 1) { return(false); } dims = dims.Slice(1); } if (dims[2] != 3) { return(false); } var data = System.Runtime.InteropServices.MemoryMarshal.Cast <float, byte>(src.Span); bmp = new SpanBitmap <Vector3>(data, dims[1], dims[0], Pixel.BGR96F.Format); return(true); }
/// <summary> /// Throws an exception if <paramref name="tensor"/> name doesn't meet <paramref name="nameConstraint"/> /// </summary> /// <typeparam name="T">An unmanaged type</typeparam> /// <param name="tensor">The tensor to verify.</param> /// <param name="nameConstraint">The name contraint to meet.</param> /// <returns><paramref name="tensor"/>.</returns> public static IDenseTensor<T> VerifyName<T>(this IDenseTensor<T> tensor, Predicate<String> nameConstraint) where T:unmanaged { if (tensor == null) throw new ArgumentNullException(nameof(tensor)); if (!nameConstraint(tensor.Name)) throw new ArgumentException($"Name mismatch, found '{tensor.Name}'."); return tensor; }
public static SpanBitmap GetSpanBitmap <T>(IDenseTensor <T> tensor) where T : unmanaged { var dims = tensor.Dimensions; var width = dims[2]; var height = dims[1]; var fmt = PixelFormat.CreateFromDepthAndChannels(typeof(T), dims[3]); var info = new BitmapInfo(width, height, fmt); var data = System.Runtime.InteropServices.MemoryMarshal.Cast <T, Byte>(tensor.Span); return(new SpanBitmap(data, info)); }
public static IDenseTensor<T> VerifyDimensions<T>(this IDenseTensor<T> tensor, params int[] dims) where T : unmanaged { if (tensor == null) throw new ArgumentNullException(nameof(tensor)); if (tensor.Dimensions.Length != dims.Length) throw new ArgumentException($"Dimensions mismatch, expected 4 but found {tensor.Dimensions.Length}."); for(int i=0; i < tensor.Dimensions.Length; ++i) { var d = dims[i]; if (d <= 0) continue; if (d != tensor.Dimensions[i]) throw new ArgumentException($"Dimension[{i}] mismatch, expected {d} but found {tensor.Dimensions[i]}."); } return tensor; }
public static SpanTensor5<T> AsSpanTensor5<T>(this IDenseTensor<T> tensor, int idx) where T : unmanaged { return new SpanTensor6<T>(tensor.Span, tensor.Dimensions)[idx]; }
public static SpanTensor4<T> AsSpanTensor4<T>(this IDenseTensor<T> tensor) where T : unmanaged { return new SpanTensor4<T>(tensor.Span, tensor.Dimensions); }