Download CorelDrawPalPaletteWriter.zip, last updated 05/08/2018 (30.38 KB)

Download
  • md5: 5dc2a39ffc96357d70d670fae102a69c
  • sha1: 87cd30771c13132db0584ebbc03986265fa278dc
  • sha256: 9cc4800ea9713c1d7f95660b1deba20f3c13e9f317171b2cbc0ff358ace10f7e
using System.Drawing;
using System.IO;

// Working with CorelDRAW Palettes part 2, writing .pal files
// https://www.cyotek.com/blog/working-with-coreldraw-palettes-part-2-writing-pal-files
// Copyright © 2018 Cyotek Ltd. All Rights Reserved.

// This work is licensed under the Creative Commons Attribution 4.0 International License.
// To view a copy of this license, visit http://creativecommons.org/licenses/by/4.0/.

// Found this example useful? 
// https://www.paypal.me/cyotek

namespace Cyotek.Demonstrations.CorelDrawPaletteWriter
{
  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(CorelDrawPalette palette, string y)
    {
      PaletteCompareResult result;

      using (Stream dest = File.OpenRead(y))
      {
        result = Compare(palette, dest);
      }

      return result;
    }

    public static PaletteCompareResult Compare(CorelDrawPalette 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)
    {
      CorelDrawPalette palette;
      bool result;

      palette = new CorelDrawPalette();
      palette.Load(x);

      result = ArePalettesEqual(palette, y);

      return result;
    }

    private static bool ArePalettesEqual(CorelDrawPalette x, Stream y)
    {
      CorelDrawPalette destination;
      bool result;

      try
      {
        destination = new CorelDrawPalette();
        destination.Load(y);
      }
      catch
      {
        destination = new CorelDrawPalette();
      }

      result = ArePalettesEqual(x, destination);

      return result;
    }

    private static bool ArePalettesEqual(CorelDrawPalette x, CorelDrawPalette 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

Donate