Added support for unpacking 24 and 32-bit images, WIP on 16-bit images

amazfit_cor
Valeriy Mironov 2018-01-06 00:47:00 +02:00
parent 020a8be99b
commit e356074f66
4 changed files with 39 additions and 5 deletions

View File

@ -34,6 +34,10 @@ namespace Resources.Image
ReadHeader();
if (_paletteColors > 0)
ReadPalette();
else if (_bitsPerPixel == 16 || _bitsPerPixel == 24 || _bitsPerPixel == 32)
Logger.Debug("The image doesn't use a palette.");
else
throw new ArgumentException("The image format is not supported. Please report the issue on https://bitbucket.org/valeronm/amazfitbiptools");
return ReadImage();
}
@ -95,10 +99,32 @@ namespace Resources.Image
var color = _palette[(int) pixelColorIndex];
context.SetPixel(x, y, color);
}
else
else if (_bitsPerPixel == 16)
{
var pixelColor = bitReader.ReadBits(_bitsPerPixel) | 0xff000000;
var color = Color.FromArgb((int) pixelColor);
var firstByte = bitReader.ReadByte();
var secondByte = bitReader.ReadByte();
var b = (secondByte >> 3 & 0x1f) << 3;
var g = (secondByte & 0x07 << 2 | firstByte & 0x40 >> 5) << 3;
var r = (firstByte & 0x1f) << 3;
var color = Color.FromArgb(0xff, r, g, b);
context.SetPixel(x, y, color);
}
else if (_bitsPerPixel == 24)
{
var alpha = (int)bitReader.ReadByte();
var b = (int)(bitReader.ReadBits(5) << 3);
var g = (int)(bitReader.ReadBits(6) << 2);
var r = (int)(bitReader.ReadBits(5) << 3);
var color = Color.FromArgb(0xff - alpha, r, g, b);
context.SetPixel(x, y, color);
}
else if (_bitsPerPixel == 32)
{
var alpha = (int)bitReader.ReadByte();
var b = (int)bitReader.ReadByte();
var g = (int)bitReader.ReadByte();
var r = (int)bitReader.ReadByte();
var color = Color.FromArgb(0xff - alpha, r, g, b);
context.SetPixel(x, y, color);
}
}

View File

@ -31,7 +31,7 @@ namespace Resources
var image = (Bitmap) System.Drawing.Image.FromFile(fullFileName);
Logger.Trace("Image was loaded from file {0}", fullFileName);
return ApplyDithering(image);
return image; // ApplyDithering(image);
}
throw new FileNotFoundException($"File referenced by index {index} not found.");

View File

@ -15,6 +15,13 @@ namespace WatchFace.Parser.Elements.TimeElements
public long ImageIndexAm { get; set; }
[ParameterId(4)]
public long PmX { get; set; }
[ParameterId(5)]
public long PmY { get; set; }
[ParameterId(6)]
[ParameterImageIndex]
public long ImageIndexPm { get; set; }
}

View File

@ -60,7 +60,8 @@ namespace WatchFace.Parser
private static Image CreateFrame(IDrawable watchFace, Bitmap[] resources, WatchState state)
{
var preview = new Bitmap(176, 176);
var background = resources[0];
var preview = new Bitmap(background.Width, background.Height);
var graphics = Graphics.FromImage(preview);
watchFace.Draw(graphics, resources, state);
return preview;