Convert ConvertSpriteToPngCommand to new Png code.
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user