コード例 #1
0
        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();
            }
        }
コード例 #2
0
        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();
        }