Beispiel #1
0
        public void visit(SFImage field)
        {
            int width      = context.ReadInt32();
            int height     = context.ReadInt32();
            int components = context.ReadInt32();

            byte[, ,] value = new byte[height, width, components];
            for (int y = 0; y < height; y++)
            {
                for (int x = 0; x < width; x++)
                {
                    uint pixel = context.ReadHexaDecimal();
                    switch (components)
                    {
                    case 1:
                        value[height - y - 1, x, 0] = (byte)(pixel & 0xff);
                        break;

                    case 2:
                        value[height - y - 1, x, 3] = (byte)(pixel & 0xff);
                        value[height - y - 1, x, 0] = (byte)((pixel >> 8) & 0xff);
                        break;

                    case 3:
                        value[height - y - 1, x, 2] = (byte)(pixel & 0xff);
                        value[height - y - 1, x, 1] = (byte)((pixel >> 8) & 0xff);
                        value[height - y - 1, x, 0] = (byte)((pixel >> 16) & 0xff);
                        break;

                    case 4:
                        value[height - y - 1, x, 3] = (byte)(pixel & 0xff);
                        value[height - y - 1, x, 2] = (byte)((pixel >> 8) & 0xff);
                        value[height - y - 1, x, 1] = (byte)((pixel >> 16) & 0xff);
                        value[height - y - 1, x, 0] = (byte)((pixel >> 24) & 0xff);
                        break;
                    }
                }
            }
            field.Value = value;
        }