Revert "Added unpacking of 32-bit images appeared in some new official WFs"

This reverts commit 1c3663b65d.
master
Valeriy Mironov 2019-02-02 23:26:15 +02:00
parent 948fd521cc
commit baa352661d
1 changed files with 3 additions and 115 deletions

View File

@ -32,17 +32,7 @@ namespace Resources.Image
throw new ArgumentException("Image signature doesn't match.");
ReadHeader();
if (_paletteColors > 256)
throw new ArgumentException(
"Too many palette colors.");
if (_paletteColors > 0)
ReadPalette();
else if (_bitsPerPixel == 8 || _bitsPerPixel == 16 || _bitsPerPixel == 24 || _bitsPerPixel == 32)
Logger.Trace("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");
ReadPalette();
return ReadImage();
}
@ -76,6 +66,7 @@ namespace Resources.Image
if (padding != 0) Logger.Warn("Palette item {0} last byte is not zero: {1:X2}", i, padding);
var isColorValid = (r == 0 || r == 0xff) && (g == 0 || g == 0xff) && (b == 0 || b == 0xff);
if (isColorValid)
Logger.Trace("Palette item {0}: R {1:X2}, G {2:X2}, B {3:X2}", i, r, g, b);
else
@ -87,16 +78,6 @@ namespace Resources.Image
}
private Bitmap ReadImage()
{
if (_paletteColors > 0) return ReadPaletteImage();
if (_bitsPerPixel == 8) return Read8BitImage();
if (_bitsPerPixel == 16) return Read16BitImage();
if (_bitsPerPixel == 24) return Read24BitImage();
if (_bitsPerPixel == 32) return Read32BitImage();
throw new ArgumentException();
}
private Bitmap ReadPaletteImage()
{
var image = new Bitmap(_width, _height);
using (var context = image.CreateUnsafeContext())
@ -108,104 +89,11 @@ namespace Resources.Image
for (var x = 0; x < _width; x++)
{
var pixelColorIndex = bitReader.ReadBits(_bitsPerPixel);
var color = _palette[(int)pixelColorIndex];
var color = _palette[(int) pixelColorIndex];
context.SetPixel(x, y, color);
}
}
}
return image;
}
private Bitmap Read8BitImage()
{
var image = new Bitmap(_width, _height);
using (var context = image.CreateUnsafeContext())
{
for (var y = 0; y < _height; y++)
{
var rowBytes = _reader.ReadBytes(_rowLengthInBytes);
for (var x = 0; x < _width; x++)
{
var data = rowBytes[x];
var color = Color.FromArgb(0xff, data, data, data);
context.SetPixel(x, y, color);
}
}
}
return image;
}
private Bitmap Read16BitImage()
{
var image = new Bitmap(_width, _height);
using (var context = image.CreateUnsafeContext())
{
for (var y = 0; y < _height; y++)
{
var rowBytes = _reader.ReadBytes(_rowLengthInBytes);
var bitReader = new BitReader(rowBytes);
for (var x = 0; x < _width; x++)
{
var firstByte = (int)bitReader.ReadByte();
var secondByte = (int)bitReader.ReadByte();
var b = (byte)((secondByte >> 3) & 0x1f) << 3;
var g = (byte)(((firstByte >> 5) & 0x7) | ((secondByte & 0x07) << 3)) << 2;
var r = (byte)(firstByte & 0x1f) << 3;
var color = Color.FromArgb(0xff, r, g, b);
context.SetPixel(x, y, color);
}
}
}
return image;
}
private Bitmap Read24BitImage()
{
var image = new Bitmap(_width, _height);
using (var context = image.CreateUnsafeContext())
{
for (var y = 0; y < _height; y++)
{
var rowBytes = _reader.ReadBytes(_rowLengthInBytes);
var bitReader = new BitReader(rowBytes);
for (var x = 0; x < _width; x++)
{
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);
}
}
}
return image;
}
private Bitmap Read32BitImage()
{
var image = new Bitmap(_width, _height);
using (var context = image.CreateUnsafeContext())
{
for (var y = 0; y < _height; y++)
{
var rowBytes = _reader.ReadBytes(_rowLengthInBytes);
for (var x = 0; x < _width; x++)
{
var r = rowBytes[x * 4];
var g = rowBytes[x * 4 + 1];
var b = rowBytes[x * 4 + 2];
var alpha = rowBytes[x * 4 + 3];
var color = Color.FromArgb(0xff - alpha, r, g, b);
context.SetPixel(x, y, color);
}
}
}
return image;
}
}