| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- /////////////////////////////////////////////////////////////////////////////////
- //
- // 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;
- }
- }
- }
|