git-svn-id: svn://svn.ijw.co.nz/svn/OpenRa@1070 993157c7-ee19-0410-b2c4-bb4e9862e678

This commit is contained in:
bob
2007-06-24 14:46:57 +00:00
parent 0b773950a9
commit b83b17385d
11 changed files with 146 additions and 30 deletions

View File

@@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
namespace OpenRa.FileFormats
{
public static class BitmapBuilder
{
public static Bitmap FromBytes( byte[] imageBytes, int width, int height, Palette pal )
{
Bitmap bitmap = new Bitmap( width, height );
for( int x = 0 ; x < width ; x++ )
for( int y = 0 ; y < height ; y++ )
bitmap.SetPixel( x, y, pal.GetColor( imageBytes[ x + width * y ] ) );
return bitmap;
}
}
}

View File

@@ -28,12 +28,17 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="MixDecrypt, Version=0.0.0.0, Culture=neutral, processorArchitecture=x86">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\debug\MixDecrypt.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Drawing" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="BitmapBuilder.cs" />
<Compile Include="Blowfish.cs" />
<Compile Include="Format40.cs" />
<Compile Include="Format80.cs" />
@@ -42,12 +47,7 @@
<Compile Include="Palette.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="ShpReader.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\MixDecrypt\MixDecrypt.vcproj">
<Project>{6F5D4280-3D23-41FF-AE2A-511B5553E377}</Project>
<Name>MixDecrypt</Name>
</ProjectReference>
<Compile Include="Terrain.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.

View File

@@ -0,0 +1,76 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Drawing;
namespace OpenRa.FileFormats
{
public class Terrain
{
public readonly int Width;
public readonly int Height;
public readonly int XDim;
public readonly int YDim;
public readonly int NumTiles;
readonly byte[] index;
readonly List<Bitmap> TileBitmaps = new List<Bitmap>();
public Terrain( Stream stream, Palette pal )
{
BinaryReader reader = new BinaryReader( stream );
Width = reader.ReadUInt16();
Height = reader.ReadUInt16();
if( Width != 24 || Height != 24 )
throw new InvalidDataException();
NumTiles = reader.ReadUInt16();
reader.ReadUInt16();
XDim = reader.ReadUInt16();
YDim = reader.ReadUInt16();
uint FileSize = reader.ReadUInt32();
uint ImgStart = reader.ReadUInt32();
reader.ReadUInt32();
reader.ReadUInt32();
int IndexEnd = reader.ReadInt32();
reader.ReadUInt32();
int IndexStart = reader.ReadInt32();
stream.Position = IndexStart;
index = new byte[ IndexEnd - IndexStart ];
stream.Read( index, 0, IndexEnd - IndexStart );
for( int i = 0 ; i < index.Length ; i++ )
{
if( index[ i ] != 255 )
{
byte[] tileData = new byte[ 24 * 24 ];
stream.Position = ImgStart + index[ i ] * 24 * 24;
stream.Read( tileData, 0, 24 * 24 );
TileBitmaps.Add( BitmapBuilder.FromBytes( tileData, 24, 24, pal ) );
}
else
TileBitmaps.Add( null );
}
}
public Bitmap GetTile( int index )
{
return TileBitmaps[ index ];
}
public Bitmap[ , ] GetTiles( int tileNum )
{
int startIndex = tileNum * XDim * YDim;
Bitmap[ , ] ret = new Bitmap[ XDim, YDim ];
for( int x = 0 ; x < XDim ; x++ )
for( int y = 0 ; y < YDim ; y++ )
ret[ x, y ] = GetTile( startIndex + x + XDim * y );
return ret;
}
}
}