Singularity/Library/PackageCache/com.unity.2d.psdimporter@6.0.7/Editor/PSDPlugin/PsdFile/Compression/RleImage.cs
2024-05-06 11:45:45 -07:00

62 lines
1.7 KiB
C#

/////////////////////////////////////////////////////////////////////////////////
//
// Photoshop PSD FileType Plugin for Paint.NET
// http://psdplugin.codeplex.com/
//
// This software is ptortorovided under the MIT License:
// Copyright (c) 2006-2007 Frank Blumenberg
// Copyright (c) 2010-2016 Tao Yue
//
// See LICENSE.txt for complete licensing and attribution information.
//
/////////////////////////////////////////////////////////////////////////////////
using System;
using System.Diagnostics;
using PDNWrapper;
using System.IO;
using System.Linq;
namespace PhotoshopFile.Compression
{
internal class RleImage : ImageData
{
private byte[] rleData;
private RleRowLengths rleRowLengths;
protected override bool AltersWrittenData
{
get { return false; }
}
public RleImage(byte[] rleData, RleRowLengths rleRowLengths,
Size size, int bitDepth)
: base(size, bitDepth)
{
this.rleData = rleData;
this.rleRowLengths = rleRowLengths;
}
internal override void Read(byte[] buffer)
{
var rleStream = new MemoryStream(rleData);
var rleReader = new RleReader(rleStream);
var bufferIndex = 0;
for (int i = 0; i < Size.Height; i++)
{
var bytesRead = rleReader.Read(buffer, bufferIndex, BytesPerRow);
if (bytesRead != BytesPerRow)
{
throw new Exception("RLE row decompressed to unexpected length.");
}
bufferIndex += bytesRead;
}
}
public override byte[] ReadCompressed()
{
return rleData;
}
}
}