Convert ConvertSpriteToPngCommand to new Png code.
This commit is contained in:
@@ -15,6 +15,7 @@ using System.Drawing.Imaging;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Runtime.InteropServices;
|
||||
using OpenRA.FileFormats;
|
||||
using OpenRA.Graphics;
|
||||
using OpenRA.Primitives;
|
||||
|
||||
@@ -47,6 +48,9 @@ namespace OpenRA.Mods.Common.UtilityCommands
|
||||
}
|
||||
|
||||
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;
|
||||
var frames = FrameLoader.GetFrames(File.OpenRead(src), modData.SpriteLoaders, out metadata);
|
||||
@@ -67,31 +71,19 @@ namespace OpenRA.Mods.Common.UtilityCommands
|
||||
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();
|
||||
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);
|
||||
}
|
||||
|
||||
pngData = new byte[frameSize.Width * frameSize.Height];
|
||||
for (var i = 0; i < frame.Size.Height; i++)
|
||||
{
|
||||
var destIndex = new IntPtr(data.Scan0.ToInt64() + (i + offset.Y) * data.Stride + offset.X);
|
||||
Marshal.Copy(frame.Data, i * frame.Size.Width, destIndex, frame.Size.Width);
|
||||
Buffer.BlockCopy(frame.Data, i * frame.Size.Width,
|
||||
pngData, (i + offset.Y) * frameSize.Width + offset.X,
|
||||
frame.Size.Width);
|
||||
}
|
||||
|
||||
bitmap.UnlockBits(data);
|
||||
|
||||
var filename = "{0}-{1:D4}.png".F(prefix, count++);
|
||||
bitmap.Save(filename);
|
||||
}
|
||||
var png = new Png(pngData, frameSize.Width, frameSize.Height, palColors);
|
||||
png.Save("{0}-{1:D4}.png".F(prefix, count++));
|
||||
}
|
||||
|
||||
Console.WriteLine("Saved {0}-[0..{1}].png", prefix, count - 1);
|
||||
|
||||
Reference in New Issue
Block a user