private void LoadFromPixelData(byte[] data)
{
Color[,] sourceImage = new Color[Width, Height];
for (int i = 0; i < Width; i++)
for (int j = 0; j < Height; j++)
sourceImage[i, j] = new Color(
data[(j * Height + i) * 4 + 2],
data[(j * Height + i) * 4 + 1],
data[(j * Height + i) * 4 + 0],
data[(j * Height + i) * 4 + 3]);
HashSet<Color> bestPalette = CreateBestPalette(sourceImage);
ColorPalette = new Palette();
int k = 0;
foreach (Color c in bestPalette)
ColorPalette.SetColor(k++, c);
for (int i = 0; i < Width; i++)
for (int j = 0; j < Height; j++)
Data[i, j] = ColorPalette.GetNearestColorIndex(sourceImage[i, j]);
}