private static int GetChannel(CameraColorSpace colorSpace) { switch (colorSpace) { case CameraColorSpace.YinYUV: case CameraColorSpace.UinYUV: case CameraColorSpace.VinYUV: case CameraColorSpace.RinRGB: case CameraColorSpace.GinRGB: case CameraColorSpace.BinRGB: case CameraColorSpace.HinHSY: case CameraColorSpace.SinHSY: case CameraColorSpace.YinHSY: return(1); case CameraColorSpace.YUV422: case CameraColorSpace.YYCbCr: case CameraColorSpace.Depth: case CameraColorSpace.Distance: case CameraColorSpace.RawDepth: return(2); case CameraColorSpace.YUV: case CameraColorSpace.RGB: case CameraColorSpace.HSY: case CameraColorSpace.H2RGB: case CameraColorSpace.HSMixed: return(3); case CameraColorSpace.XYZ: return(12); default: throw new InvalidOperationException(); } }
public static BitmapSource GetFreezedImageFromBytes(byte[] data, CameraType cameraType, CameraColorSpace colorSpace, CameraResolution resolution) { var size = GetSize(resolution); int channel = GetChannel(colorSpace); if (size.Width * size.Height * channel != data.Length) { return(BitmapSource.Create(size.Width, size.Height, Dpi, Dpi, PixelFormats.Gray8, null, new byte[size.Width * size.Height], size.Width)); } if (channel == 1) { return(GetSingleChanneledImage(data, size.Width, size.Height, (colorSpace == CameraColorSpace.RinRGB ? ChannelSelection.Red : colorSpace == CameraColorSpace.GinRGB ? ChannelSelection.Green : colorSpace == CameraColorSpace.BinRGB ? ChannelSelection.Blue : ChannelSelection.Gray) )); } //ホントは2チャネルのケースって4/4/4/4とかだったりするのだけど面倒なので赤と青に振っておしまい if (channel == 2) { return(GetTwoChanneledImage(data, size.Width, size.Height, ChannelSelection.Red, ChannelSelection.Blue)); } if (channel == 3) { return(GetThreeChanneledImage(data, size.Width, size.Height)); } if (channel == 12) { Get12ChanneledImage(data, size.Width, size.Height); } throw new NotImplementedException(); }