Archive Browser
Download WestwoodPaletteLoader.zip, last updated 26/12/2017 (27.76 KB)
Download- md5: da29ba80301e3fa413c90a973afdaec9
- sha1: 362ce84dba11d8047dc3c1dc3e44ee2f0edee602
- sha256: 2e31cc54ea412623684856d331851c8b213bc6369629c620a2fc2d44aedae2bd
using System.Drawing;
using System.IO;
// Reading and writing 18-bit RGB VGA Palette (pal) files with C#
// http://www.cyotek.com/blog/reading-and-writing-18-bit-rgb-vga-palette-pal-files-with-csharp
namespace Cyotek.Demonstrations.Rgb18BitPalette
{
internal static class PaletteComparer
{
#region Static Methods
public static PaletteCompareResult Compare(string x, string y)
{
using (Stream source = File.OpenRead(x))
{
using (Stream dest = File.OpenRead(y))
{
return Compare(source, dest);
}
}
}
public static PaletteCompareResult Compare(Stream x, Stream y)
{
PaletteCompareResult result;
if (!AreFilesEqual(x, y))
{
y.Position = 0;
y.Position = 0;
result = !ArePalettesEqual(x, y) ? PaletteCompareResult.Mismatch : PaletteCompareResult.ColorMatch;
}
else
{
result = PaletteCompareResult.Match;
}
return result;
}
public static PaletteCompareResult Compare(WestwoodPalette palette, string y)
{
PaletteCompareResult result;
using (Stream dest = File.OpenRead(y))
{
result = Compare(palette, dest);
}
return result;
}
public static PaletteCompareResult Compare(WestwoodPalette palette, Stream y)
{
PaletteCompareResult result;
result = !ArePalettesEqual(palette, y) ? PaletteCompareResult.Mismatch : PaletteCompareResult.ColorMatch;
return result;
}
private static bool AreFilesEqual(Stream source, Stream dest)
{
bool result;
result = source.Length == dest.Length;
if (result)
{
byte[] sourceBuffer;
byte[] destBuffer;
int sourceRead;
int destRead;
int bufferSize;
bufferSize = 4096;
sourceBuffer = new byte[bufferSize];
destBuffer = new byte[bufferSize];
do
{
sourceRead = source.Read(sourceBuffer, 0, bufferSize);
destRead = dest.Read(destBuffer, 0, bufferSize);
if (sourceRead != destRead)
{
result = false;
}
else
{
for (int i = 0; i < sourceRead; i++)
{
if (sourceBuffer[i] != destBuffer[i])
{
result = false;
break;
}
}
}
} while ((sourceRead != 0 || destRead != 0) && result);
}
return result;
}
private static bool ArePalettesEqual(Stream x, Stream y)
{
WestwoodPalette palette;
bool result;
palette = new WestwoodPalette();
palette.Load(x);
result = ArePalettesEqual(palette, y);
return result;
}
private static bool ArePalettesEqual(WestwoodPalette x, Stream y)
{
WestwoodPalette destination;
bool result;
try
{
destination = new WestwoodPalette();
destination.Load(y);
}
catch
{
destination = new WestwoodPalette();
}
result = ArePalettesEqual(x, destination);
return result;
}
private static bool ArePalettesEqual(WestwoodPalette x, WestwoodPalette y)
{
bool result;
if (x.Count == y.Count)
{
result = true;
for (int i = 0; i < x.Count; i++)
{
Color cx;
Color cy;
cx = x[i];
cy = y[i];
if (cx.ToArgb() != cy.ToArgb())
{
result = false;
break;
}
}
}
else
{
result = false;
}
return result;
}
#endregion
}
}
Donate
This software may be used free of charge, but as with all free software there are costs involved to develop and maintain.
If this site or its services have saved you time, please consider a donation to help with running costs and timely updates.
Donate