コード例 #1
0
ファイル: AverageDebayer.cs プロジェクト: Rambalac/photodev
        //{
        //    {ColorComponent.G, ColorComponent.B},
        //    {ColorComponent.R,ColorComponent.G}
        //};


        public ColorMap <ushort> Process(RawMap <ushort> map)
        {
            var res  = new ColorMapUshort(map.Width, map.Height, map.MaxBits + 2);
            var pix  = res.GetPixel();
            var file = map.GetPixel();

            for (var x = 0; x < res.Width; x++)
            {
                pix.MoveNext();
                file.MoveNext();
            }
            for (var y = 1; y < res.Height - 1; y++)
            {
                pix.MoveNext();
                file.MoveNext();
                for (var x = 1; x < res.Width - 1; x++)
                {
                    var component = _componentsMap[(y + 0) % 2, (x + 0) % 2];
                    var invertRb  = ((x % 2) ^ (y % 2)) == 0;
                    switch (component)
                    {
                    case ColorComponent.R:
                        pix[0] = (ushort)(file.Value << 2);
                        pix[1] =
                            (ushort)
                            ((file.GetRel(-1, 0) + file.GetRel(+1, 0) + file.GetRel(0, -1) + file.GetRel(0, +1)));
                        pix[2] =
                            (ushort)
                            ((file.GetRel(-1, -1) + file.GetRel(+1, -1) + file.GetRel(-1, +1) +
                              file.GetRel(+1, +1)));
                        break;

                    case ColorComponent.G:
                        pix[(invertRb) ? 2 : 0] = (ushort)((file.GetRel(-1, 0) + file.GetRel(+1, 0)) << 1);
                        pix[1] = (ushort)(file.Value << 2);
                        pix[(invertRb) ? 0 : 2] = (ushort)((file.GetRel(0, -1) + file.GetRel(0, +1)) << 1);
                        break;

                    case ColorComponent.B:
                        pix[0] =
                            (ushort)
                            ((file.GetRel(-1, -1) + file.GetRel(+1, -1) + file.GetRel(-1, +1) +
                              file.GetRel(+1, +1)));
                        pix[1] =
                            (ushort)
                            ((file.GetRel(-1, 0) + file.GetRel(+1, 0) + file.GetRel(0, -1) + file.GetRel(0, +1)));
                        pix[2] = (ushort)(file.Value << 2);
                        break;
                    }
                    pix.MoveNext();
                    file.MoveNext();
                }
                pix.MoveNext();
                file.MoveNext();
            }
            for (var x = 0; x < res.Width; x++)
            {
                pix.MoveNext();
                file.MoveNext();
            }
            return(res);
        }