public byte[] LoadImage(string imagePath, Arranger arranger, ColorMatchStrategy matchStrategy) { using var inputImage = SixLabors.ImageSharp.Image.Load <Rgba32>(imagePath); var width = inputImage.Width; var height = inputImage.Height; var outputImage = new byte[width * height]; int destidx = 0; for (int y = 0; y < height; y++) { var span = inputImage.GetPixelRowSpan(y); for (int x = 0; x < width; x++, destidx++) { if (arranger.GetElementAtPixel(x, y) is ArrangerElement el) { var pal = el.Palette; var color = new ColorRgba32(span[x].PackedValue); var palIndex = pal.GetIndexByNativeColor(color, matchStrategy); outputImage[destidx] = palIndex; } } } return(outputImage); }
public MagitekResult TryImportImage(string imagePath, IImageFileAdapter adapter, ColorMatchStrategy matchStrategy) { var result = adapter.TryLoadImage(imagePath, Arranger, matchStrategy, out var importImage); if (result.Value is MagitekResult.Success) { importImage.CopyTo(Image, 0); } return(result); }
public MagitekResult TryLoadImage(string imagePath, Arranger arranger, ColorMatchStrategy matchStrategy, out byte[] image) { using var inputImage = SixLabors.ImageSharp.Image.Load <Rgba32>(imagePath); var width = inputImage.Width; var height = inputImage.Height; if (width != arranger.ArrangerPixelSize.Width || height != arranger.ArrangerPixelSize.Height) { image = default; return(new MagitekResult.Failed($"Arranger dimensions ({arranger.ArrangerPixelSize.Width}, {arranger.ArrangerPixelSize.Height})" + $" do not match image dimensions ({width}, {height})")); } image = new byte[width * height]; int destidx = 0; for (int y = 0; y < height; y++) { var span = inputImage.GetPixelRowSpan(y); for (int x = 0; x < width; x++, destidx++) { if (arranger.GetElementAtPixel(x, y) is ArrangerElement el) { var pal = el.Palette; var color = new ColorRgba32(span[x].PackedValue); if (pal.TryGetIndexByNativeColor(color, matchStrategy, out var palIndex)) { image[destidx] = palIndex; } else { return(new MagitekResult.Failed($"Could not match image color (R: {color.R}, G: {color.G}, B: {color.B}, A: {color.A}) within palette '{pal.Name}'")); } } } } return(MagitekResult.SuccessResult); }
public void ImportImage(string imagePath, IImageFileAdapter adapter, ColorMatchStrategy matchStrategy) { var importImage = adapter.LoadImage(imagePath, Arranger, matchStrategy); importImage.CopyTo(Image, 0); }