Added reading new format of .res-files, fixed order of drawing AmPm element

fonts_experiment
Valeriy Mironov 2018-01-27 20:57:32 +02:00
parent 950462fb90
commit 2398ab8086
6 changed files with 64 additions and 16 deletions

View File

@ -1,5 +1,6 @@
using System;
using System.IO;
using System.Text;
using NLog;
using Resources.Models;
@ -13,15 +14,25 @@ namespace Resources
{
var binaryReader = new BinaryReader(stream);
Logger.Trace("Reading resources header");
var header = Header.ReadFrom(binaryReader);
Logger.Trace("Resources header was read:");
Logger.Trace("Signature: {0}, Version: {1}, ResourcesCount: {2}, IsValid: {3}",
header.Signature, header.Version, header.ResourcesCount, header.IsValid
);
var signature = Encoding.ASCII.GetString(binaryReader.ReadBytes(5));
Logger.Trace("Resources signature was read:");
stream.Seek(0, SeekOrigin.Begin);
Logger.Trace("Signature: {0}", signature);
if (!header.IsValid)
throw new ArgumentException("Invalid resources header");
Header header;
switch (signature) {
case Header.ResSignature:
header = Header.ReadFrom(binaryReader);
break;
case NewHeader.ResSignature:
header = NewHeader.ReadFrom(binaryReader);
break;
default:
throw new ArgumentException($"Signature '{signature}' is no recognized.");
}
Logger.Trace("Resources header was read:");
Logger.Trace("Version: {0}, ResourcesCount: {1}", header.Version, header.ResourcesCount);
return new FileDescriptor
{

View File

@ -29,8 +29,8 @@ namespace Resources
Version = descriptor.Version.Value
};
Logger.Trace("Writing resources header...");
Logger.Trace("Signature: {0}, Version: {1}, ResourcesCount: {2}, IsValid: {3}",
header.Signature, header.Version, header.ResourcesCount, header.IsValid
Logger.Trace("Signature: {0}, Version: {1}, ResourcesCount: {2}",
header.Signature, header.Version, header.ResourcesCount
);
header.WriteTo(_binaryWriter);

View File

@ -7,14 +7,12 @@ namespace Resources.Models
public class Header
{
public const int HeaderSize = 20;
private const string ResSignature = "HMRES";
public const string ResSignature = "HMRES";
public string Signature { get; private set; } = ResSignature;
public string Signature { get; protected set; } = ResSignature;
public byte Version { get; set; }
public uint ResourcesCount { get; set; }
public bool IsValid => Signature == ResSignature;
public void WriteTo(BinaryWriter writer)
{
var buffer = new byte[HeaderSize];

View File

@ -0,0 +1,37 @@
using System;
using System.IO;
using System.Text;
namespace Resources.Models
{
public class NewHeader : Header
{
public new const int HeaderSize = 0x24;
public new const string ResSignature = "NERES";
public uint Unknown { get; set; }
public new void WriteTo(BinaryWriter writer)
{
var buffer = new byte[HeaderSize];
for (var i = 0; i < buffer.Length; i++) buffer[i] = 0xff;
Encoding.ASCII.GetBytes(ResSignature).CopyTo(buffer, 0);
buffer[5] = Version;
BitConverter.GetBytes(Unknown).CopyTo(buffer, 0xa);
BitConverter.GetBytes(ResourcesCount).CopyTo(buffer, 0x20);
writer.Write(buffer);
}
public new static NewHeader ReadFrom(BinaryReader reader)
{
var buffer = reader.ReadBytes(HeaderSize);
return new NewHeader
{
Signature = Encoding.ASCII.GetString(buffer, 0, 0x5),
Version = buffer[0x5],
Unknown = BitConverter.ToUInt32(buffer, 0xa),
ResourcesCount = BitConverter.ToUInt32(buffer, 0x20)
};
}
}
}

View File

@ -49,6 +49,7 @@
<ItemGroup>
<Compile Include="ImageLoader.cs" />
<Compile Include="Models\FileDescriptor.cs" />
<Compile Include="Models\Header.cs" />
<Compile Include="Utils\BitReader.cs" />
<Compile Include="Utils\BitWriter.cs" />
<Compile Include="Image\ColorError.cs" />
@ -57,7 +58,7 @@
<Compile Include="Writer.cs" />
<Compile Include="Extractor.cs" />
<Compile Include="FileWriter.cs" />
<Compile Include="Models\Header.cs" />
<Compile Include="Models\NewHeader.cs" />
<Compile Include="Image\Reader.cs" />
<Compile Include="FileReader.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />

View File

@ -19,6 +19,8 @@ namespace WatchFace.Parser.Models.Elements
public override void Draw(Graphics drawer, Bitmap[] images, WatchState state)
{
AmPm?.Draw(drawer, images, state);
var hours = AmPm == null ? state.Time.Hour : state.Time.Hour % 12;
var drawingOrder = DrawingOrder ?? 0x1234;
@ -43,7 +45,6 @@ namespace WatchFace.Parser.Models.Elements
}
Seconds?.Draw(drawer, images, state.Time.Second);
AmPm?.Draw(drawer, images, state);
}
protected override Element CreateChildForParameter(Parameter parameter)