Convert ConvertSpriteToPngCommand to new Png code.

This commit is contained in:
Paul Chote
2019-02-16 17:25:38 +00:00
committed by reaperrr
parent 82fade25a6
commit 368b0314d5

View File

@@ -15,6 +15,7 @@ using System.Drawing.Imaging;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using OpenRA.FileFormats;
using OpenRA.Graphics; using OpenRA.Graphics;
using OpenRA.Primitives; using OpenRA.Primitives;
@@ -47,6 +48,9 @@ namespace OpenRA.Mods.Common.UtilityCommands
} }
var palette = new ImmutablePalette(args[2], shadowIndex); var palette = new ImmutablePalette(args[2], shadowIndex);
var palColors = new Color[Palette.Size];
for (var i = 0; i < Palette.Size; i++)
palColors[i] = palette.GetColor(i);
TypeDictionary metadata; TypeDictionary metadata;
var frames = FrameLoader.GetFrames(File.OpenRead(src), modData.SpriteLoaders, out metadata); var frames = FrameLoader.GetFrames(File.OpenRead(src), modData.SpriteLoaders, out metadata);
@@ -67,31 +71,19 @@ namespace OpenRA.Mods.Common.UtilityCommands
continue; continue;
} }
using (var bitmap = new Bitmap(frameSize.Width, frameSize.Height, PixelFormat.Format8bppIndexed)) // TODO: expand frame with zero padding
var pngData = frame.Data;
if (frameSize != frame.Size)
{ {
bitmap.Palette = palette.AsSystemPalette(); pngData = new byte[frameSize.Width * frameSize.Height];
var data = bitmap.LockBits(new Rectangle(0, 0, frameSize.Width, frameSize.Height),
ImageLockMode.WriteOnly, PixelFormat.Format8bppIndexed);
// Clear the frame
if (usePadding && !frame.DisableExportPadding)
{
var clearRow = new byte[data.Stride];
for (var i = 0; i < frameSize.Height; i++)
Marshal.Copy(clearRow, 0, new IntPtr(data.Scan0.ToInt64() + i * data.Stride), data.Stride);
}
for (var i = 0; i < frame.Size.Height; i++) for (var i = 0; i < frame.Size.Height; i++)
{ Buffer.BlockCopy(frame.Data, i * frame.Size.Width,
var destIndex = new IntPtr(data.Scan0.ToInt64() + (i + offset.Y) * data.Stride + offset.X); pngData, (i + offset.Y) * frameSize.Width + offset.X,
Marshal.Copy(frame.Data, i * frame.Size.Width, destIndex, frame.Size.Width); frame.Size.Width);
} }
bitmap.UnlockBits(data); var png = new Png(pngData, frameSize.Width, frameSize.Height, palColors);
png.Save("{0}-{1:D4}.png".F(prefix, count++));
var filename = "{0}-{1:D4}.png".F(prefix, count++);
bitmap.Save(filename);
}
} }
Console.WriteLine("Saved {0}-[0..{1}].png", prefix, count - 1); Console.WriteLine("Saved {0}-[0..{1}].png", prefix, count - 1);