Exemplo n.º 1
0
 private void validateTileSizeForDimensions(WmfHeader header)
 {
     if (header.width % header.tileSize != 0 || header.height % header.tileSize != 0)
     {
         throw new Exception("Map dimensions do not fit the tilesize");
     }
 }
Exemplo n.º 2
0
        private void readWmfValue(EndianBinaryReader reader, WmfHeader header, WmfFile file, uint xLocation, uint yLocation)
        {
            float value = readValueFromReader(reader, header, xLocation, yLocation);

            if (header.auxDataSize > 0)
            {
                byte waterTypeId = reader.ReadByte();
                ushort waterBodyIndex = reader.ReadUInt16();
                file.addPixel(new WmfPixelInfo(xLocation, yLocation, value, waterTypeId, waterBodyIndex));
            }
            else
            {
                file.addPixel(new WmfPixelInfo(xLocation, yLocation, value));
            }
        }
Exemplo n.º 3
0
        private float readValueFromReader(EndianBinaryReader reader, WmfHeader header, uint xLocation, uint yLocation)
        {
            float value;

            if (header.floatingPointFlag)
            {
                float readSingleValue = reader.ReadSingle();
                debugLine("v: " + readSingleValue);
                value = header.verticalScale * readSingleValue + header.verticalOffset;
                debugLine("cv: " + value);
            }
            else
            {
                switch (header.waterLevelDataSize)
                {
                    case 2:
                        ushort readShortValue = reader.ReadUInt16();
                        debugLine("v: " + readShortValue);
                        value = header.verticalScale * readShortValue + header.verticalOffset;
                        debugLine("cv: " + value);
                        break;
                    default: throw new Exception("Invalid pixel data at x: " + xLocation + ", y: " + yLocation);
                }
            }
            return value;
        }
Exemplo n.º 4
0
        private void readTiledData(EndianBinaryReader reader, WmfHeader header, WmfFile file)
        {
            validateTileSizeForDimensions(header);

            uint horizontalTiles = header.width / header.tileSize;
            uint verticalTiles = header.height / header.tileSize;

            for (int y = 0; y < verticalTiles; y++)
            {
                for (int x = 0; x < horizontalTiles; x++)
                {
                    readTile(x, y, header, reader, file);
                }
            }
        }
Exemplo n.º 5
0
 private void readTile(int x, int y, WmfHeader header, EndianBinaryReader reader, WmfFile file)
 {
     for (int j = 1; j <= header.tileSize; j++)
     {
         for (int i = 1; i <= header.tileSize; i++)
         {
             uint xLocation = (uint)((x * header.tileSize) + i);
             uint yLocation = (uint)((y * header.tileSize) + j);
             readWmfValue(reader, header, file, xLocation, yLocation);
         }
     }
 }
Exemplo n.º 6
0
        private void readConventionalData(EndianBinaryReader reader, WmfHeader header, WmfFile file)
        {
            uint totalPixels = header.width * header.height;
            uint xLocation = 1;
            uint yLocation = 1;
            for (int i = 0; i < totalPixels; i++)
            {
                readWmfValue(reader, header, file, xLocation, yLocation);
                xLocation++;
                if (xLocation > header.width)
                {
                    xLocation = 1;
                    yLocation++;
                }
            }

            debugLine("pixel count: " + file.pixels.Count());
        }