Added warning for not supported colors on extracting images
parent
68274901de
commit
ce8bcabd50
|
@ -15,7 +15,7 @@ namespace Resources
|
|||
private Color[] _palette;
|
||||
private ushort _paletteColors;
|
||||
private ushort _rowLengthInBytes;
|
||||
private ushort _transparency;
|
||||
private bool _transparency;
|
||||
private ushort _width;
|
||||
|
||||
public ImageReader(Stream stream)
|
||||
|
@ -42,7 +42,7 @@ namespace Resources
|
|||
_rowLengthInBytes = _reader.ReadUInt16();
|
||||
_bitsPerPixel = _reader.ReadUInt16();
|
||||
_paletteColors = _reader.ReadUInt16();
|
||||
_transparency = _reader.ReadUInt16();
|
||||
_transparency = _reader.ReadUInt16() > 0;
|
||||
Logger.Trace("Image header was read:");
|
||||
Logger.Trace("Width: {0}, Height: {1}, RowLength: {2}", _width, _height, _rowLengthInBytes);
|
||||
Logger.Trace("BPP: {0}, PaletteColors: {1}, Transaparency: {2}",
|
||||
|
@ -57,14 +57,20 @@ namespace Resources
|
|||
for (var i = 0; i < _paletteColors; i++)
|
||||
{
|
||||
var r = _reader.ReadByte();
|
||||
if (r != 0 && r != 0xff) Logger.Warn("Palette item {0} R value isn't supported: {1:X2}", i, r);
|
||||
|
||||
var g = _reader.ReadByte();
|
||||
if (g != 0 && g != 0xff) Logger.Warn("Palette item {0} G value isn't supported: {1:X2}", i, g);
|
||||
|
||||
var b = _reader.ReadByte();
|
||||
var a = _reader.ReadByte();
|
||||
Logger.Trace("Palette item {0}: R {1:x2}, G {2:x2}, B {3:x2}, A {4:x2}", i, r, g, b, a);
|
||||
if (b != 0 && b != 0xff) Logger.Warn("Palette item {0} B value isn't supported: {1:X2}", i, b);
|
||||
|
||||
var color = _transparency > 0 && i == 0 ? Color.Transparent : Color.FromArgb(0xff, r, g, b);
|
||||
var padding = _reader.ReadByte(); // always 0 maybe padding
|
||||
if (padding != 0) Logger.Warn("Palette item {0} last byte is not zero: {1:X2}", i, padding);
|
||||
|
||||
_palette[i] = color;
|
||||
Logger.Trace("Palette item {0}: R {1:X2}, G {2:X2}, B {3:X2}", i, r, g, b);
|
||||
|
||||
_palette[i] = Color.FromArgb(_transparency && i == 0 ? 0x00 : 0xff, r, g, b);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -28,7 +28,7 @@ namespace Resources
|
|||
var imagesOffsets = _binaryReader.ReadBytes(offsetsTableLength);
|
||||
var imagesOffset = _stream.Position;
|
||||
|
||||
Logger.Trace("Reading {0} resources", imagesTableLength);
|
||||
Logger.Debug("Reading {0} images...", imagesTableLength);
|
||||
var images = new Bitmap[imagesTableLength];
|
||||
for (var i = 0; i < imagesTableLength; i++)
|
||||
{
|
||||
|
@ -39,6 +39,7 @@ namespace Resources
|
|||
Logger.Warn("Found {0} bytes gap before resource number {1}", bytesGap, i);
|
||||
_stream.Seek(imageOffset, SeekOrigin.Begin);
|
||||
}
|
||||
Logger.Debug("Reading image {0}...", i);
|
||||
images[i] = new ImageReader(_stream).Read();
|
||||
}
|
||||
return images;
|
||||
|
|
|
@ -11,11 +11,11 @@ namespace WatchFace.Parser
|
|||
{
|
||||
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
|
||||
|
||||
private readonly FileStream _fileStream;
|
||||
private readonly Stream _stream;
|
||||
|
||||
public Reader(FileStream streamReader)
|
||||
public Reader(Stream stream)
|
||||
{
|
||||
_fileStream = streamReader;
|
||||
_stream = stream;
|
||||
}
|
||||
|
||||
public List<Parameter> Parameters { get; private set; }
|
||||
|
@ -24,7 +24,7 @@ namespace WatchFace.Parser
|
|||
public void Read()
|
||||
{
|
||||
Logger.Trace("Reading header...");
|
||||
var header = Header.ReadFrom(_fileStream);
|
||||
var header = Header.ReadFrom(_stream);
|
||||
Logger.Trace("Header was read:");
|
||||
Logger.Trace("Signature: {0}, Unknown: {1}, ParametersSize: {2}, IsValid: {3}", header.Signature,
|
||||
header.Unknown,
|
||||
|
@ -32,7 +32,7 @@ namespace WatchFace.Parser
|
|||
if (!header.IsValid) return;
|
||||
|
||||
Logger.Trace("Reading parameter offsets...");
|
||||
var parametersStream = StreamBlock(_fileStream, (int) header.ParametersSize);
|
||||
var parametersStream = StreamBlock(_stream, (int) header.ParametersSize);
|
||||
Logger.Trace("Parameter offsets were read from file");
|
||||
|
||||
Logger.Trace("Reading parameters descriptor...");
|
||||
|
@ -47,13 +47,13 @@ namespace WatchFace.Parser
|
|||
Logger.Trace("Watch face parameters locations were read:");
|
||||
|
||||
Parameters = ReadParameters(parametrsTableLength, parametersLocations);
|
||||
Images = new ResourcesReader(_fileStream).Read((uint) imagesCount);
|
||||
Images = new ResourcesReader(_stream).Read((uint) imagesCount);
|
||||
}
|
||||
|
||||
private List<Parameter> ReadParameters(long coordinatesTableSize,
|
||||
IReadOnlyCollection<Parameter> parametersDescriptors)
|
||||
{
|
||||
var parametersStream = StreamBlock(_fileStream, (int) coordinatesTableSize);
|
||||
var parametersStream = StreamBlock(_stream, (int) coordinatesTableSize);
|
||||
|
||||
var result = new List<Parameter>(parametersDescriptors.Count);
|
||||
foreach (var prameterDescriptor in parametersDescriptors)
|
||||
|
|
Loading…
Reference in New Issue