Move to faster ZLibStream
This commit is contained in:
committed by
Gustas Kažukauskas
parent
d0ca1af555
commit
9528f19845
@@ -12,11 +12,10 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.IO.Compression;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using ICSharpCode.SharpZipLib.Zip.Compression;
|
|
||||||
using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
|
|
||||||
using OpenRA.Graphics;
|
using OpenRA.Graphics;
|
||||||
using OpenRA.Primitives;
|
using OpenRA.Primitives;
|
||||||
|
|
||||||
@@ -24,12 +23,6 @@ namespace OpenRA.FileFormats
|
|||||||
{
|
{
|
||||||
public class Png
|
public class Png
|
||||||
{
|
{
|
||||||
public enum Compression : byte
|
|
||||||
{
|
|
||||||
BEST_COMPRESSION = Deflater.BEST_COMPRESSION,
|
|
||||||
BEST_SPEED = Deflater.BEST_SPEED,
|
|
||||||
}
|
|
||||||
|
|
||||||
static readonly byte[] Signature = [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a];
|
static readonly byte[] Signature = [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a];
|
||||||
|
|
||||||
public int Width { get; }
|
public int Width { get; }
|
||||||
@@ -139,7 +132,7 @@ namespace OpenRA.FileFormats
|
|||||||
{
|
{
|
||||||
using (var ns = new MemoryStream(data.ToArray()))
|
using (var ns = new MemoryStream(data.ToArray()))
|
||||||
{
|
{
|
||||||
using (var ds = new InflaterInputStream(ns))
|
using (var ds = new ZLibStream(ns, CompressionMode.Decompress))
|
||||||
{
|
{
|
||||||
var pxStride = PixelStride;
|
var pxStride = PixelStride;
|
||||||
var rowStride = Width * pxStride;
|
var rowStride = Width * pxStride;
|
||||||
@@ -340,7 +333,7 @@ namespace OpenRA.FileFormats
|
|||||||
output.Write(IPAddress.NetworkToHostOrder((int)finalCrc));
|
output.Write(IPAddress.NetworkToHostOrder((int)finalCrc));
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte[] Save(Compression compression = Compression.BEST_COMPRESSION)
|
public byte[] Save(CompressionLevel compression = CompressionLevel.SmallestSize)
|
||||||
{
|
{
|
||||||
using (var output = new MemoryStream())
|
using (var output = new MemoryStream())
|
||||||
{
|
{
|
||||||
@@ -392,7 +385,7 @@ namespace OpenRA.FileFormats
|
|||||||
|
|
||||||
using (var data = new MemoryStream())
|
using (var data = new MemoryStream())
|
||||||
{
|
{
|
||||||
using (var compressed = new DeflaterOutputStream(data, new Deflater((int)compression)))
|
using (var compressed = new ZLibStream(data, compression, true))
|
||||||
{
|
{
|
||||||
var rowStride = Width * PixelStride;
|
var rowStride = Width * PixelStride;
|
||||||
for (var y = 0; y < Height; y++)
|
for (var y = 0; y < Height; y++)
|
||||||
@@ -402,12 +395,9 @@ namespace OpenRA.FileFormats
|
|||||||
compressed.WriteByte(FilterType);
|
compressed.WriteByte(FilterType);
|
||||||
compressed.Write(Data, y * rowStride, rowStride);
|
compressed.Write(Data, y * rowStride, rowStride);
|
||||||
}
|
}
|
||||||
|
|
||||||
compressed.Flush();
|
|
||||||
compressed.Finish();
|
|
||||||
|
|
||||||
WritePngChunk(output, "IDAT", data);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WritePngChunk(output, "IDAT", data);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (var kv in EmbeddedData)
|
foreach (var kv in EmbeddedData)
|
||||||
@@ -424,7 +414,7 @@ namespace OpenRA.FileFormats
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Save(string path, Compression compression = Compression.BEST_COMPRESSION)
|
public void Save(string path, CompressionLevel compression = CompressionLevel.SmallestSize)
|
||||||
{
|
{
|
||||||
File.WriteAllBytes(path, Save(compression));
|
File.WriteAllBytes(path, Save(compression));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using OpenRA.FileFormats;
|
using System.IO.Compression;
|
||||||
using OpenRA.FileSystem;
|
using OpenRA.FileSystem;
|
||||||
using OpenRA.Graphics;
|
using OpenRA.Graphics;
|
||||||
|
|
||||||
@@ -100,14 +100,14 @@ namespace OpenRA.Mods.Common.UtilityCommands
|
|||||||
public static void CommitSheet(SheetBuilder builder, Sheet sheet, string name, ImmutablePalette palette, ref int count)
|
public static void CommitSheet(SheetBuilder builder, Sheet sheet, string name, ImmutablePalette palette, ref int count)
|
||||||
{
|
{
|
||||||
if (builder == null)
|
if (builder == null)
|
||||||
sheet.AsPng().Save($"{count++}.{name}.png", Png.Compression.BEST_SPEED);
|
sheet.AsPng().Save($"{count++}.{name}.png", CompressionLevel.Fastest);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (palette != null)
|
if (palette != null)
|
||||||
{
|
{
|
||||||
var channels = sheet == builder.Current ? (int)builder.CurrentChannel + 1 : 4;
|
var channels = sheet == builder.Current ? (int)builder.CurrentChannel + 1 : 4;
|
||||||
for (var i = 0; i < channels; i++)
|
for (var i = 0; i < channels; i++)
|
||||||
sheet.AsPng((TextureChannel)ChannelMasks[i], palette).Save($"{count}.{i}.{name}.png", Png.Compression.BEST_SPEED);
|
sheet.AsPng((TextureChannel)ChannelMasks[i], palette).Save($"{count}.{i}.{name}.png", CompressionLevel.Fastest);
|
||||||
|
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user